Hoey笔记

和有趣的人做尽有趣的事


  • Home

  • Archives

  • Sitemap

  • Search

Python 项目目录

Posted on 2024-11-11

内容

  • 机器学习框架63 个项目
  • 数据可视化54 个项目
  • 文本数据和 NLP103 项目
  • Image Data64 个项目
  • 图形数据36 个项目
  • 音频数据29 个项目
  • 地理空间数据22 个项目
  • 财务数据25 个项目
  • Time Series Data30 个项目
  • 医疗数据19 个项目
  • 表格数据5 个项目
  • 光学字符识别12 个项目
  • 数据容器和结构1 项目
  • 数据加载和提取1 个项目
  • 网页抓取和抓取1 个项目
  • 数据管道和流式1 项目
  • 分布式机器学习36 个项目
  • 超参数优化 & AutoML52 项目
  • 强化学习23 个项目
  • 推荐系统17 个项目
  • 隐私机器学习7 个项目
  • 工作流程和实验跟踪40个项目
  • 模型序列化和部署20 个项目
  • 模型可解释性54 个项目
  • 向量相似性搜索 (ANN)13 个项目
  • 概率与统计24个项目
  • 对抗性稳健性9 个项目
  • GPU &加速器实用程序20 个项目
  • Tensorflow Utilities16 个项目
  • Jax Utilities3 个项目
  • Sklearn Utilities19 个项目
  • Pytorch Utilities32 个项目
  • 数据库客户端1 项目
  • 其他66 个项目

机器学习框架

通用机器学习和深度学习框架。

Tensorflow (🥇55 · ⭐ 190K) - 适合所有人的开源机器学习框架。阿帕奇-2
PyTorch (🥇55 · ⭐ 84K) - Python中的张量和动态神经网络,具有强大的GPU..BSD-3 封装
scikit-learn (🥇53 · ⭐ 60K) - scikit-learn:Python 中的机器学习。BSD-3 封装
Keras (🥇48 · ⭐ 62K) - 人类深度学习。阿帕奇-2
XGBoost (🥇46 · ⭐ 26K) - 可扩展、可移植和分布式梯度提升 (GBDT, GBRT or..阿帕奇-2
PySpark (🥇45 · ⭐ 40K) - Apache Spark Python API。 阿帕奇-2
jax (🥇45 · ⭐ 30K) - Python+NumPy 程序的组合转换:区分,..阿帕奇-2
PaddlePaddle (🥇45 · ⭐ 22K) - PArallel 分布式深度布线:机器学习..阿帕奇-2
StatsModels (🥇45 · ⭐ 10K) - Statsmodels:Python 中的统计建模和计量经济学。BSD-3 封装
pytorch-lightning (🥈43 · ⭐ 28K) - 预训练,微调任何大小的AI模型..阿帕奇-2
LightGBM (🥈43 · ⭐ 17K) - 一种快速、分布式、高性能梯度提升(GBT、GBDT、GBRT,..麻省理工学院
Catboost (🥈42 · ⭐ 8.1K) - 快速、可扩展、高性能的决策梯度提升..阿帕奇-2
Fastai (🥈41 · ⭐ 26K) - fastai 深度学习库。阿帕奇-2
PyFlink (🥈38 · ⭐ 24K) - Apache Flink Python API。阿帕奇-2
Flax (🥈38 · ⭐ 6.1K) - Flax是一个专为..阿帕奇-2
Jina (🥈37 · ⭐ 21K) - 使用云原生堆栈构建多模式 AI 应用程序。阿帕奇-2
Theano (🥈37 · ⭐ 9.9K · 💤 ) - Theano是一个Python库,允许你定义、优化和..BSD-3 封装
einops (🥈36 · ⭐ 8.5K) - 灵活且强大的张量操作,用于可读和可靠的代码..麻省理工学院
Thinc (🥈36 · ⭐ 2.8K) - 一款令人耳目一新的深度学习功能化尝试,与你最喜欢的兼容..麻省理工学院
Vowpal Wabbit (🥈35 · ⭐ 8.5K) - Vowpal Wabbit是一个机器学习系统,它推动了..BSD-3 封装
mlpack (🥈35 · ⭐ 5.1K) - mlpack:一个快速的、仅限头文件的 C++ 机器学习库。BSD-3 封装
Ignite (🥈35 · ⭐ 4.5K) - 高级库,帮助训练和评估神经..BSD-3 封装
Ludwig (🥉33 · ⭐ 11K) - 用于构建自定义LLMs、神经网络和..阿帕奇-2
Haiku (🥉32 · ⭐ 2.9K) - 基于 JAX 的神经网络库。阿帕奇-2
Sonnet (🥉31 · ⭐ 9.8K) - 基于 TensorFlow 的神经网络库。 阿帕奇-2
dyNET (🥉31 · ⭐ 3.4K · 💤 ) - DyNet:动态神经网络工具包。阿帕奇-2
Determined (🥉31 · ⭐ 3K) - Determined 是一个开源的机器学习平台..阿帕奇-2
tensorflow-upstream (🥉31 · ⭐ 690) - TensorFlow ROCm 端口。阿帕奇-2
skorch (🥉30 · ⭐ 5.9K) - 一个兼容scikit-learn的神经网络库,包装..BSD-3 封装
Geomstats (🥉30 · ⭐ 1.3K) - 具有几何结构的流形的计算和统计。麻省理工学院
神经网络库 (🥉28 · ⭐ 2.7K) - 神经网络库。阿帕奇-2
ktrain (🥉28 · ⭐ 1.2K) - ktrain是一个Python库,使深度学习和AI更加强大..阿帕奇-2
EvaDB (🥉27 · ⭐ 2.6K · 💤 ) - 用于 AI 驱动的应用程序的数据库系统。
pyRiemann (🥉27 · ⭐ 640) - 通过黎曼数据集进行多元数据的机器学习..BSD-3 封装
Towhee (🥉26 · ⭐ 3.2K) - Towhee是一个专门用于制作神经数据的框架。阿帕奇-2
SHOGUN (🥉26 · ⭐ 3K · 💤 ) - 统一高效的机器学习。BSD-3 封装
Neural Tangents (🥉24 · ⭐ 2.3K · 💤 ) - Python 中快速简便的无限神经网络。阿帕奇-2
fklearn (🥉23 · ⭐ 1.5K) - fklearn:函数机器学习。阿帕奇-2
Runhouse (🥉23 · ⭐ 970) - 将您的ML训练分派并分发到无服务器集群中。阿帕奇-2
ThunderSVM (🥉22 · ⭐ 1.6K · 💤 ) - ThunderSVM:GPU 和 CPU 上的快速 SVM 库。阿帕奇-2
NeoML (🥉22 · ⭐ 770) - 深度学习和传统机器学习框架。阿帕奇-2
Torchbearer (🥉22 · ⭐ 640 · 💤 ) - torchbearer:PyTorch 的模型拟合库。麻省理工学院
chefboost (🥉22 · ⭐ 460) - 支持常规算法的轻量级决策树框架:..麻省理工学院
MACE (🥉21 · ⭐ 4.9K · 💤 ) - MACE是一个针对移动设备优化的深度学习推理框架。阿帕奇-2
Objax (🥉21 · ⭐ 770 · 💤 ) - Objax是一个机器学习框架,提供了一个对象。阿帕奇-2
ThunderGBM (🥉19 · ⭐ 690 · 💤 ) - ThunderGBM:GPU 上的快速 GBDT 和随机森林。阿帕奇-2
显示 17 个隐藏的项目...

数据可视化

通用和特定于任务的数据可视化库。

Matplotlib (🥇48 · ⭐ 20K) - matplotlib:使用 Python 绘图。❗没有执照的
Bokeh (🥇45 · ⭐ 19K) - 浏览器中的交互式数据可视化,来自 Python。BSD-3 封装
Plotly (🥇45 · ⭐ 16K) - Python的交互式绘图库 这个项目现在包括..麻省理工学院
dash (🥇43 · ⭐ 21K) - Python的数据应用和仪表板。无需 JavaScript。麻省理工学院
Altair (🥇42 · ⭐ 9.3K) - 用于 Python 的声明式统计可视化库。BSD-3 封装
Seaborn (🥇41 · ⭐ 13K · 📉 ) - Python 中的统计数据可视化。BSD-3 封装
pyecharts (🥈38 · ⭐ 15K · 📈 ) - Python echarts 绘图库。麻省理工学院
HoloView (🥈38 · ⭐ 2.7K) - 使用 Holoviews,您的数据可以自行可视化。BSD-3 封装
pandas-profiling (🥈37 · ⭐ 13K) - 1行代码数据质量分析和探索..麻省理工学院
PyQtGraph (🥈37 · ⭐ 3.9K) - 用于科学/工程的快速数据可视化和GUI工具..麻省理工学院
PyVista (🥈37 · ⭐ 2.7K) - 通过流线型界面进行3D绘图和网格分析。麻省理工学院
FiftyOne (🥈36 · ⭐ 8.8K) - 可视化、创建和调试图像和视频数据集..阿帕奇-2
cartopy (🥈36 · ⭐ 1.4K) - Cartopy - 一个支持 matplotlib 的制图 python 库。BSD-3 封装
UMAP (🥈35 · ⭐ 7.4K) - 均匀流形近似和投影。BSD-3 封装
plotnine (🥈35 · ⭐ 4K) - Python 的图形语法。麻省理工学院
Graphviz (🥈35 · ⭐ 1.6K) - 用于 Graphviz 的简单 Python 接口。麻省理工学院
VisPy (🥈34 · ⭐ 3.3K) - 高性能交互式 2D/3D 数据可视化库。BSD-3 封装
datashader (🥈34 · ⭐ 3.3K) - 快速准确地渲染最大的数据。BSD-3 封装
Perspective (🥈33 · ⭐ 8.5K) - 一个数据可视化和分析组件,特别是..阿帕奇-2
wordcloud (🥈32 · ⭐ 10K) - Python 中的一个小词云生成器。麻省理工学院
lets-plot (🥈32 · ⭐ 1.6K) - 基于图形语法的多平台绘图库。麻省理工学院
hvPlot (🥈32 · ⭐ 1.1K) - 为pandas、dask、xarray和networkx构建的高级绘图API。BSD-3 封装
D-Tale (🥉31 · ⭐ 4.8K) - pandas 数据结构的可视化工具。❗️LGPL-2.1
mpld3 (🥉30 · ⭐ 2.4K) - 一个交互式数据可视化工具,它将matplotlib图形引入..BSD-3 封装
bqplot (🥉29 · ⭐ 3.6K) - 用于 IPython/Jupyter 笔记本的绘图库。阿帕奇-2
openTSNE (🥉28 · ⭐ 1.5K) - t-SNE 的可扩展并行实现。BSD-3 封装
Chartify(🥉27 · ⭐ 3.5K) - 使数据科学家易于创建的Python库..阿帕奇-2
data-validation (🥉27 · ⭐ 760) - 用于探索和验证机器学习的库..阿帕奇-2
Sweetviz (🥉26 · ⭐ 2.9K · 💤 ) - 可视化并比较数据集、目标值和关联,与..麻省理工学院
HyperTools (🥉26 · ⭐ 1.8K · 💤 ) - 用于获得对高-..的几何见解的 Python 工具箱麻省理工学院
AutoViz (🥉26 · ⭐ 1.7K) - 自动可视化任何数据集,任何大小,只需一行..阿帕奇-2
Plotly-Resampler (🥉25 · ⭐ 1K) - 使用 plotly.py 可视化大型时间序列数据。麻省理工学院
python-ternary (🥉24 · ⭐ 730) - 带有 matplotlib 的 python 三元绘图库。麻省理工学院
vega (🥉24 · ⭐ 370) - 用于 Vega 和 Vega-Lite 的 IPython/Jupyter 笔记本模块。BSD-3 封装
ivis (🥉24 · ⭐ 330) - 使用暹罗语在非常大的数据集中降维..阿帕奇-2
Multicore-TSNE (🥉23 · ⭐ 1.9K · 💤 ) - 使用 Python 和 Torch 的并行 t-SNE 实现..BSD-3 封装
PyWaffle (🥉22 · ⭐ 580) - 用 Python 制作华夫饼图。麻省理工学院
animatplot (🥉21 · ⭐ 410) - 一个基于 matplotlib 构建的用于动画绘图的 python 包。麻省理工学院
vegafusion (🥉19 · ⭐ 330) - Vega 和 Altair 可视化的服务器端扩展。BSD-3 封装
显示 15 个隐藏的项目...

文本数据和 NLP

用于处理、清理、操作和分析文本数据的库,以及用于 NLP 任务的库,例如语言检测、模糊匹配、分类、seq2seq 学习、对话式 AI、关键字提取和翻译。

变形金刚 (🥇52 · ⭐ 130K) - 变形金刚:最先进的机器学习...阿帕奇-2
spaCy (🥇45 · ⭐ 30K) - Python 中的工业级自然语言处理 (NLP)。麻省理工学院
nltk (🥇45 · ⭐ 14K) - 用于符号和统计自然的库和程序套件..阿帕奇-2
litellm (🥇43 · ⭐ 14K) - Python SDK,代理服务器 (LLM Gateway) 调用 100+..麻省理工学院others
句子转换符 (🥇41 · ⭐ 15K) - 最先进的文本嵌入。阿帕奇-2
Tokenizers (🥇40 · ⭐ 9K) - 快速的最先进的Tokenizers,针对研究和..阿帕奇-2
gensim (🥇39 · ⭐ 16K) - 人类主题建模。❗️LGPL-2.1
Rasa (🥇38 · ⭐ 19K · 💤 ) - 开源机器学习框架,用于自动化文本和..阿帕奇-2
flair (🥇38 · ⭐ 14K) - 一个非常简单的框架,用于最先进的自然语言处理..麻省理工学院
sentencepiece (🥇37 · ⭐ 10K) - 用于神经网络基础文本的无监督文本分词器..阿帕奇-2
fairseq (🥇36 · ⭐ 30K) - Facebook AI Research Sequence-to-Sequence Toolkit 用 Python 编写。麻省理工学院
NeMo (🥇36 · ⭐ 12K) - 一个为研究人员和..阿帕奇-2
TextBlob (🥇36 · ⭐ 9.1K) - 简单,Pythonic,文本处理--情感分析,词性..麻省理工学院
spark-nlp (🥇36 · ⭐ 3.9K) - 最先进的自然语言处理。阿帕奇-2
fastText (🥈35 · ⭐ 26K · 💤 ) - 用于快速文本表示和分类的库。麻省理工学院
haystack (🥈35 · ⭐ 18K) - AI编排框架,用于构建可定制的、生产就绪的..阿帕奇-2
节 (🥈34 · ⭐ 7.3K) - 斯坦福 NLP Python 库,用于分词、句子分割,..阿帕奇-2
rubrix (🥈34 · ⭐ 4K) - Argilla是AI工程师和领域专家的协作工具。阿帕奇-2
TensorFlow Text (🥈34 · ⭐ 1.2K) - 使文本成为 TensorFlow 中的一等公民。阿帕奇-2
qdrant (🥈33 · ⭐ 20K) - qdrant - 高性能,大规模向量数据库和向量..阿帕奇-2
ftfy (🥈33 · ⭐ 3.8K) - 事后修复 Unicode 文本中的 mojibake 和其他故障。阿帕奇-2
Jellyfish (🥈33 · ⭐ 2.1K) - 一个用于对字符串进行近似和语音匹配的 Python 库。麻省理工学院
ParlAI (🥈32 · ⭐ 10K · 💤 ) - 一个用于在各种..麻省理工学院
OpenNMT (🥈32 · ⭐ 6.8K) - 开源神经机器翻译和(大型)语言模型..麻省理工学院
torchtext (🥈32 · ⭐ 3.5K) - 用于语言处理的模型、数据加载器和抽象,..BSD-3 封装
DeepPavlov (🥈31 · ⭐ 6.7K) - 一个用于深度学习端到端对话的开源库..阿帕奇-2
Dedupe (🥈31 · ⭐ 4.1K) - 一个用于准确且可扩展的模糊匹配的python库,记录..麻省理工学院
TextDistance (🥈30 · ⭐ 3.4K) - 计算序列之间的距离。 30+算法,纯python.. 麻省理工学院
SciSpacy (🥈30 · ⭐ 1.7K) - 用于科学/生物医学文件的完整 spaCy 管道和模型。阿帕奇-2
snowballstemmer (🥈30 · ⭐ 760) - Snowball 编译器和词干提取算法。BSD-3 封装
Sumy (🥈28 · ⭐ 3.5K) - 用于文本文档和 HTML 页面自动摘要的模块。阿帕奇-2
spacy-transformers (🥈28 · ⭐ 1.4K) - 使用预训练的转换器,如 BERT、XLNet 和 GPT-2..MIT空间
english-words (🥉27 · ⭐ 11K) - 一个包含所有..取消许可
DeepKE (🥉27 · ⭐ 3.5K) - [EMNLP 2022] 一个用于知识图谱提取和..麻省理工学院
CLTK (🥉27 · ⭐ 840 · 📉 ) - 古典语言工具包。麻省理工学院
scattertext (🥉26 · ⭐ 2.2K) - 文档之间语言差异的美丽可视化..阿帕奇-2
PyTextRank (🥉26 · ⭐ 2.1K) - 短语的 TextRank 算法(文本图)的 Python 实现..什么
Opik (🥉25 · ⭐ 2K) - 开源端到端 LLM 开发平台。阿帕奇-2
T5 (🥉24 · ⭐ 6.2K) - 论文 Exploring the Limits of Transfer Learning with a.. 的代码。阿帕奇-2
detoxify (🥉23 · ⭐ 960) - 经过训练的模型和代码来预测所有3个拼图上的有毒评论..阿帕奇-2
finetune (🥉23 · ⭐ 700) - 用于 NLP 的 Scikit-learn 样式模型微调。MPL-2.0 系列
Sockeye (🥉22 · ⭐ 1.2K) - 专注于神经机器的序列到序列框架..阿帕奇-2
small-text (🥉22 · ⭐ 560) - Python 中文本分类的主动学习。麻省理工学院
happy-transformer (🥉22 · ⭐ 520 · 💤 ) - Happy Transformer 使微调和..Apache-2huggingface
fast-bert (🥉21 · ⭐ 1.9K) - 基于 BERT 的 NLP 模型的超级简单库。 阿帕奇-2
UForm (🥉19 · ⭐ 1K) - 用于内容理解和生成的袖珍型多模态人工智能..阿帕奇-2
textAugment (🥉18 · ⭐ 400 · 💤 ) - TextAugment:文本增强库。麻省理工学院
OpenNRE (🥉16 · ⭐ 4.3K · 💤 ) - 用于神经关系提取 (NRE) 的开源包。麻省理工学院
VizSeq (🥉16 · ⭐ 440) - 用于自然语言生成(翻译,..的分析工具包麻省理工学院
显示 54 个隐藏的项目...

图像数据

用于图像和视频处理、操作和增强的库,以及用于计算机视觉任务(如面部识别、对象检测和分类)的库。

枕头 (🥇48 · ⭐ 12K) - Python 图像库 (Fork)。 ❗️箭
PyTorch 图像模型 (🥇42 · ⭐ 32K) - 最大的 PyTorch 图像编码器集合 /..阿帕奇-2
torchvision (🥇42 · ⭐ 16K) - 特定于计算机视觉的数据集、转换和模型。BSD-3 封装
Albumentations (🥇40 · ⭐ 14K) - 快速灵活的图像增广库。论文关于..麻省理工学院
deepface (🥇39 · ⭐ 14K) - 轻量级人脸识别和人脸属性分析 (Age,..麻省理工学院
Kornia (🥇38 · ⭐ 9.9K) - 用于空间 AI 的几何计算机视觉库。阿帕奇-2
imageio (🥇38 · ⭐ 1.5K) - 用于读取和写入图像数据的 Python 库。BSD-2 型
InsightFace (🥈37 · ⭐ 23K) - 最先进的 2D 和 3D 人脸分析项目。麻省理工学院
MoviePy (🥈37 · ⭐ 13K · 📉 ) - 使用 Python 进行视频编辑。麻省理工学院
MMDetection (🥈36 · ⭐ 30K · 💤 ) - OpenMMLab 检测工具箱和基准测试。阿帕奇-2
opencv-python (🥈35 · ⭐ 4.5K) - 自动化 CI 工具链,用于生成预编译的 opencv-python,..麻省理工学院
detectron2 (🥈34 · ⭐ 30K) - Detectron2是一个用于对象检测、分割的平台。阿帕奇-2
PaddleSeg (🥈34 · ⭐ 8.7K) - 易于使用的图像分割库,具有超棒的 pre-..阿帕奇-2
Wand (🥈34 · ⭐ 1.4K) - 用于 Python 的基于 ctypes 的简单 ImageMagick 绑定。麻省理工学院
vit-pytorch (🥈32 · ⭐ 20K) - Vision Transformer的实现,一种简单的实现方式..麻省理工学院
lightly (🥈32 · ⭐ 3.2K) - 用于对图像进行自我监督学习的 python 库。麻省理工学院
ImageHash (🥈31 · ⭐ 3.2K) - Python 感知图像哈希模块。BSD-2 型
imageai (🥈30 · ⭐ 8.6K · 💤 ) - 一个为使开发人员能够构建应用程序而构建的python库..麻省理工学院
CellProfiler (🥈30 · ⭐ 920) - 用于生物图像分析的开源应用程序。BSD-3 封装
PaddleDetection (🥈29 · ⭐ 13K) - 基于 PaddlePaddle 的对象检测工具包。它。。阿帕奇-2
doctr (🥈29 · ⭐ 3.8K) - docTR (Document Text Recognition) - 无缝、高-..阿帕奇-2
mtcnn (🥈29 · ⭐ 2.2K) - TensorFlow 的 MTCNN 人脸检测实现,作为 PIP 包。麻省理工学院
sahi (🥉28 · ⭐ 4.1K) - 框架不可知的切片/平铺推理 + 交互式用户界面 + 错误分析..麻省理工学院
vidgear (🥉28 · ⭐ 3.4K) - 一个高性能的跨平台视频处理Python框架..阿帕奇-2
mahotas (🥉28 · ⭐ 840) - Python 中的计算机视觉。麻省理工学院
facenet-pytorch (🥉27 · ⭐ 4.5K) - 预训练的Pytorch人脸检测(MTCNN)和面部..麻省理工学院
Pyvips (🥉27 · ⭐ 650) - 使用 cfFi 对 libvips 进行 Python 绑定。麻省理工学院
人脸对齐 (🥉26 · ⭐ 7.1K) - 使用 pytorch 构建 2D 和 3D 人脸对齐库。BSD-3 封装
tensorflow-graphics (🥉26 · ⭐ 2.8K) - TensorFlow Graphics: 可微图形层..阿帕奇-2
Norfair (🥉26 · ⭐ 2.4K) - 用于添加实时多对象跟踪的轻量级Python库..BSD-3 封装
MMF (🥉25 · ⭐ 5.5K) - 来自..BSD-3 封装
pytorchvideo (🥉24 · ⭐ 3.3K) - 用于视频理解研究的深度学习库。阿帕奇-2
ffcv (🥉24 · ⭐ 2.9K) - FFCV:快进计算机视觉(和其他 ML 工作负载!阿帕奇-2
segmentation_models (🥉23 · ⭐ 4.8K) - 具有预训练主干的分割模型。Keras..麻省理工学院
vissl (🥉23 · ⭐ 3.3K · 💤 ) - VISSL是可扩展、模块化和可扩展的FAIRs库。麻省理工学院
kubric (🥉23 · ⭐ 2.3K) - 用于创建半真实合成的数据生成管道..阿帕奇-2
icevision (🥉22 · ⭐ 850) - 一个不可知的计算机视觉框架 - 可插拔到任何培训..阿帕奇-2
DE⫶TR (🥉20 · ⭐ 14K · 💤 ) - 使用变压器进行端到端对象检测。阿帕奇-2
PySlowFast (🥉20 · ⭐ 6.6K) - PySlowFast:来自FAIR的视频理解代码库..阿帕奇-2
scenic (🥉18 · ⭐ 3.3K) - 风景:用于计算机视觉研究及其他领域的 Jax 库。阿帕奇-2
显示 24 个隐藏的项目...

图形数据

用于图形处理、聚类、嵌入和机器学习任务的库。

networkx (🥇44 · ⭐ 15K) - Python 中的网络分析。 BSD-3 封装
PyTorch Geometric (🥇40 · ⭐ 21K) - PyTorch 的图形神经网络库。麻省理工学院
dgl (🥇38 · ⭐ 14K) - 在现有DL之上构建Python包,以简化图形上的深度学习。阿帕奇-2
pygraphistry (🥈32 · ⭐ 2.2K) - PyGraphistry 是一个用于快速加载、调整形状的 Python 库,..BSD-3 封装
PyKEEN (🥈32 · ⭐ 1.7K) - 用于学习和评估知识图嵌入的 Python 库。麻省理工学院
Spektral (🥈28 · ⭐ 2.4K · 💤 ) - 使用 Keras 和 Tensorflow 2 进行图形神经网络。麻省理工学院
ogb (🥈28 · ⭐ 1.9K · 💤 ) - 用于图形机器学习的基准测试数据集、数据加载器和评估器。麻省理工学院
AmpliGraph (🥈26 · ⭐ 2.2K · 💤 ) - 用于知识表示学习的Python库..阿帕奇-2
pytorch_geometric_temporal (🥈25 · ⭐ 2.7K) - PyTorch 几何时间:时空信号..麻省理工学院
PyTorch-BigGraph (🥈24 · ⭐ 3.4K · 💤 ) - 从大规模的图形结构中生成嵌入。BSD-3 封装
Node2Vec (🥈24 · ⭐ 1.2K) - node2vec 算法的实现。 麻省理工学院
torch-cluster (🥉22 · ⭐ 820) - 优化图集群的 PyTorch 扩展库..麻省理工学院
deepsnap (🥉20 · ⭐ 550 · 💤 ) - Python 库有助于对图形进行深度学习。麻省理工学院
Sematch (🥉18 · ⭐ 430 · 💤 ) - 知识图谱的语义相似性框架。阿帕奇-2
kglib (🥉17 · ⭐ 550 · 💤 ) - TypeDB-ML 是 TypeDB 的机器学习集成库。阿帕奇-2
AutoGL (🥉15 · ⭐ 1.1K · 💤 ) - 一个用于图形机器学习的autoML框架和工具包。阿帕奇-2
OpenNE (🥉14 · ⭐ 1.7K · 💤 ) - 用于网络嵌入 (NE) 的开源软件包。麻省理工学院
GraphVite (🥉14 · ⭐ 1.2K) - GraphVite:一种通用且高性能的图形嵌入系统。阿帕奇-2
显示 18 个隐藏的项目...

音频数据

用于音频分析、操作、转换和提取以及语音识别和音乐生成任务的库。

speechbrain (🥇41 · ⭐ 8.9K) - 基于 PyTorch 的语音工具包。阿帕奇-2
espnet (🥇38 · ⭐ 8.5K) - 端到端语音处理工具包。阿帕奇-2
SpeechRecognition (🥇35 · ⭐ 8.4K) - Python的语音识别模块,支持多种..BSD-3 封装
torchaudio (🥇35 · ⭐ 2.5K) - 音频信号的数据处理和转换..BSD-2 型
Coqui TTS (🥈34 · ⭐ 35K · 💤 ) - 用于文本转语音、战斗的深度学习工具包-..MPL-2.0 系列
librosa (🥈32 · ⭐ 7.1K) - 用于音频和音乐分析的 Python 库。国际生物中心
spleeter (🥈31 · ⭐ 26K) - Deezer 源分离库,包括预训练模型。麻省理工学院
洋红色 (🥈31 · ⭐ 19K) - 洋红色:使用机器智能生成音乐和艺术。阿帕奇-2
audiomentations (🥈31 · ⭐ 1.9K) - 用于音频数据增强的 Python 库。灵感来自..麻省理工学院
Porcupine (🥈30 · ⭐ 3.8K) - 由深度学习提供支持的设备端唤醒词检测。阿帕奇-2
audioread (🥈30 · ⭐ 490 · 💤 ) - 跨库 (GStreamer + Core Audio + MAD + FFmpeg) 音频..麻省理工学院
python-soundfile (🥉29 · ⭐ 710) - SoundFile 是一个基于 libsndfile、CFFI 和..BSD-3 封装
tinytag (🥉29 · ⭐ 700) - 用于读取音频文件元数据的 Python 库。麻省理工学院
Madmom (🥉26 · ⭐ 1.3K) - Python 音频和音乐信号处理库。BSD-3 封装
DDSP (🥉24 · ⭐ 2.9K) - DDSP:可微数字信号处理。阿帕奇-2
nnAudio (🥉22 · ⭐ 1K · 💤 ) - 使用 pytorch 一维卷积网络进行音频处理。麻省理工学院
显示 13 个隐藏的项目...

地理空间数据

用于加载、处理、分析和写入地理数据的库,以及用于空间分析、地图可视化和地理编码的库。

pydeck (🥇43 · ⭐ 12K) - 由 WebGL2 提供支持的可视化框架。麻省理工学院
Shapely (🥇40 · ⭐ 3.9K) - 几何对象的操作和分析。BSD-3 封装
folium (🥇39 · ⭐ 6.9K) - Python 数据。Leaflet.js 地图。麻省理工学院
GeoPandas (🥇39 · ⭐ 4.5K) - 用于地理数据的 Python 工具。BSD-3 封装
Rasterio (🥈38 · ⭐ 2.3K) - Rasterio 读取和写入地理空间栅格数据集。BSD-3 封装
ArcGIS API (🥈37 · ⭐ 1.9K) - ArcGIS API for Python 的文档和示例。 阿帕奇-2
Fiona (🥈37 · ⭐ 1.2K) - Fiona 读取和写入地理数据文件。BSD-3 封装
pyproj (🥈36 · ⭐ 1.1K) - PROJ 的 Python 接口(制图投影和坐标..麻省理工学院
geopy (🥈32 · ⭐ 4.5K · 💤 ) - Python 的地理编码库。麻省理工学院
ipyleaflet (🥈32 · ⭐ 1.5K) - Jupyter - Leaflet.js桥。 我
PySAL (🥉30 · ⭐ 1.3K) - PySAL:Python 空间分析库元包。BSD-3 封装
geojson (🥉30 · ⭐ 920) - GeoJSON 的 Python 绑定和实用程序。BSD-3 封装
GeoViews (🥉29 · ⭐ 600) - 用 Python 进行简单、简洁的地理可视化。BSD-3 封装
pymap3d (🥉23 · ⭐ 390 · 💤 ) - 纯Python(Numpy可选)地理空间的3D坐标转换..BSD-2 型
显示 8 个隐藏的项目...

财务数据

用于算法股票/加密交易、风险分析、回溯测试、技术分析和其他财务数据任务的库。

yfinance (🥇41 · ⭐ 15K) - 从 Yahoo! Finances API 下载市场数据。阿帕奇-2
ta (🥈30 · ⭐ 4.3K · 💤 ) - 使用 Pandas 和 Numpy 的技术分析库。麻省理工学院
bt (🥈30 · ⭐ 2.3K) - bt - Python 的灵活回测。麻省理工学院
Qlib (🥈29 · ⭐ 15K) - Qlib是一个面向AI的量化投资平台,旨在..麻省理工学院
ffn (🥈28 · ⭐ 2K) - ffn - Python 的财务函数库。麻省理工学院
Alpha Vantage (🥈27 · ⭐ 4.3K) - 用于财务数据的 Alpha Vantage API 的 python 包装器。麻省理工学院
IB-insync (🥈27 · ⭐ 2.8K · 💤 ) - 盈透证券 API 的 Python 同步/异步框架。BSD-2 型
TensorTrade (🥉26 · ⭐ 4.6K) - 用于训练的开源强化学习框架,..阿帕奇-2
stockstats (🥉25 · ⭐ 1.3K · 💤 ) - 根据..BSD-3 封装
tf-quant-finance (🥉22 · ⭐ 4.5K) - 用于定量的高性能TensorFlow库..阿帕奇-2
finmarketpy (🥉22 · ⭐ 3.5K) - 用于回测交易策略和分析的Python库..阿帕奇-2
显示 14 个隐藏的项目...

时间序列数据

用于对时间序列和顺序数据进行预测、异常检测、特征提取和机器学习的库。

sktime (🥇39 · ⭐ 7.9K) - 具有时间序列的机器学习统一框架。BSD-3 封装
先知 (🥇35 · ⭐ 18K) - 用于为时间序列数据生成高质量预测的工具..麻省理工学院
StatsForecast (🥇34 · ⭐ 4K) - 用统计和计量经济学进行闪电般的快速预测..阿帕奇-2
pytorch-forecasting (🥈32 · ⭐ 4K) - 使用 PyTorch 进行时间序列预测。麻省理工学院
STUMPY (🥈32 · ⭐ 3.7K) - STUMPY是一个强大且可扩展的现代时间序列Python库。BSD-3 封装
NeuralForecast (🥈32 · ⭐ 3.1K) - 可扩展且用户友好的神经预测算法。阿帕奇-2
tsfresh (🥈31 · ⭐ 8.4K) - 从时间序列中自动提取相关特征:。麻省理工学院
Darts (🥈31 · ⭐ 8.1K) - 一个用于用户友好预测和异常检测的python库。阿帕奇-2
pmdarima (🥈31 · ⭐ 1.6K) - 一个旨在填补Python时间序列空白的统计库..麻省理工学院
skforecast (🥈31 · ⭐ 1.1K · 📈 ) - 使用机器学习模型进行时间序列预测。BSD-3 封装
GluonTS (🥈30 · ⭐ 4.6K) - Python 中的概率时间序列建模。阿帕奇-2
tslearn (🥈30 · ⭐ 2.9K) - 用于 Python 时间序列分析的机器学习工具包。BSD-2 型
NeuralProphet (🥉29 · ⭐ 3.9K) - NeuralProphet:一个简单的预测包。麻省理工学院
TSFEL (🥉24 · ⭐ 930) - 一个直观的库,用于从时间序列中提取特征。BSD-3 封装
uber/orbit (🥉23 · ⭐ 1.9K) - 一个用于贝叶斯预测的Python包,具有面向对象的功能。阿帕奇-2
pydlm (🥉22 · ⭐ 480) - 用于贝叶斯时间序列建模的 python 库。BSD-3 封装
tsflex (🥉21 · ⭐ 400) - 灵活的时间序列特征提取和处理。麻省理工学院
greykite (🥉20 · ⭐ 1.8K · 💤 ) - 一个灵活、直观和快速的预测库。BSD-2 型
自动TS (🥉18 · ⭐ 730 · 📉 ) - 自动构建ARIMA,SARIMAX,VAR,FB Prophet和XGBoost..阿帕奇-2
显示 11 个隐藏的项目...

医疗数据

用于处理和分析医疗数据(如 MRI、EEG、基因组数据和其他医学成像格式)的库。

MNE (🥇39 · ⭐ 2.7K) - MNE:Python 中的脑磁图 (MEG) 和脑电图 (EEG)。BSD-3 封装
Nilearn (🥇37 · ⭐ 1.2K · 📈 ) - Python 神经成像的机器学习。BSD-3 封装
MONAI (🥈36 · ⭐ 5.8K) - 用于医疗保健成像的 AI 工具包。阿帕奇-2
NIPYPE (🥈36 · ⭐ 750 · 📈 ) - 神经成像软件包的工作流程和接口。阿帕奇-2
NiBabel (🥈36 · ⭐ 650) - 用于访问各种神经成像文件格式的 Python 包。麻省理工学院
Lifelines (🥈34 · ⭐ 2.4K) - Python 中的生存分析。麻省理工学院
Hail (🥈33 · ⭐ 980) - 云原生基因组数据帧和批处理计算。麻省理工学院
DeepVariant (🥉24 · ⭐ 3.2K · 💤 ) - DeepVariant 是一个使用深度..BSD-3 封装
Brainiak (🥉19 · ⭐ 340) - 脑成像分析试剂盒。阿帕奇-2
显示 10 个隐藏的项目...

表格数据

用于处理表格和结构化数据的库。

pytorch_tabular (🥇23 · ⭐ 1.4K) - 一个建模深度学习模型的标准框架..麻省理工学院
miceforest (🥈22 · ⭐ 350 · 📉 ) - Python 中使用 LightGBM 进行多重插补。麻省理工学院
upgini (🥉21 · ⭐ 320) - 用于机器学习的数据搜索和丰富库 轻松查找和添加..BSD-3 封装
carefree-learn (🥉18 · ⭐ 400 · 💤 ) - 深度学习 PyTorch。麻省理工学院
显示 1 个隐藏的项目...

光学字符识别

用于光学字符识别 (OCR) 和从图像或视频中提取文本的库。

PaddleOCR (🥇40 · ⭐ 44K) - 基于 PaddlePaddle 的超棒多语言 OCR 工具包..阿帕奇-2
EasyOCR (🥇35 · ⭐ 24K) - 即用型OCR,支持80+种语言和所有流行的写作..阿帕奇-2
OCRmyPDF (🥇35 · ⭐ 14K) - OCRmyPDF为扫描的PDF文件添加了一个OCR文本层,允许它们..MPL-2.0 系列
Tesseract (🥈32 · ⭐ 5.8K) - Python-tesseract 是一种光学字符识别 (OCR) 工具。阿帕奇-2
tesserocr (🥈30 · ⭐ 2K) - tesseract-ocr API 的 Python 包装器。 麻省理工学院
MMOCR (🥉26 · ⭐ 4.3K · 💤 ) - OpenMMLab 文本检测、识别和理解工具箱。阿帕奇-2
keras-ocr (🥉26 · ⭐ 1.4K · 💤 ) - 一个打包且灵活的CRAFT文本检测器版本..麻省理工学院
显示 5 个隐藏的项目...

数据容器和结构

通用数据容器和结构以及熊猫的实用程序和扩展。

🔗 best-of-python - 数据容器 ( ⭐ 3.7K) - 数据容器、数据帧和 panda 的集合-..

数据加载和提取

用于从各种数据源和格式加载、收集和提取数据的库。

🔗 best-of-python - 数据提取 ( ⭐ 3.7K) - 数据加载和提取库的集合。

网页抓取和爬虫

用于 Web 抓取、爬取、下载和挖掘的库以及库。

🔗 best-of-web-python - Web Scraping ( ⭐ 2.3K) - Web 抓取和爬取库的集合。

数据管道和流

用于数据批处理和流处理、工作流自动化、作业调度和其他数据管道任务的库。

🔗 best-of-python - 数据管道 ( ⭐ 3.7K) - 用于数据批处理和流处理的库,..

分布式机器学习

提供跨大规模计算基础设施分发和并行化机器学习任务的功能的库。

Ray (🥇45 · ⭐ 34K) - Ray 是一个 AI 计算引擎。Ray 由一个核心分布式运行时组成..阿帕奇-2
dask (🥇44 · ⭐ 13K) - 使用任务调度的并行计算。BSD-3 封装
DeepSpeed (🥇41 · ⭐ 35K) - DeepSpeed是一个深度学习优化库,它使..阿帕奇-2
dask.distributed (🥇40 · ⭐ 1.6K) - Dask 的分布式任务调度器。BSD-3 封装
metrics (🥈36 · ⭐ 2.1K) - 分布式、可扩展的 PyTorch 的机器学习指标..阿帕奇-2
H2O-3 (🥈35 · ⭐ 6.9K) - H2O是一种开源的、分布式的、快速且可扩展的机器学习..阿帕奇-2
horovod (🥈34 · ⭐ 14K) - TensorFlow、Keras、PyTorch 和..阿帕奇-2
BigDL (🥈34 · ⭐ 6.7K) - 加速本地 LLM 推理和微调 (LLaMA, Mistral,..阿帕奇-2
ColossalAI (🥈33 · ⭐ 39K) - 使大型 AI 模型更便宜、更快、更易于访问。阿帕奇-2
FairScale (🥈30 · ⭐ 3.2K) - 用于高性能和大规模训练的 PyTorch 扩展。BSD-3 封装
mpi4py (🥈30 · ⭐ 810) - MPI 的 Python 绑定。BSD-3 封装
SynapseML (🥈29 · ⭐ 5.1K) - 简单的分布式机器学习。麻省理工学院
提交它 (🥈29 · ⭐ 1.3K) - 用于向 Slurm 提交作业的 Python 3.8+ 工具箱。麻省理工学院
petastorm (🥉28 · ⭐ 1.8K · 💤 ) - Petastorm 库支持单机或分布式..阿帕奇-2
dask-ml (🥉28 · ⭐ 900) - 使用 Dask 进行可扩展机器学习。BSD-3 封装
Hivemind (🥉25 · ⭐ 2K) - PyTorch 中的去中心化深度学习。为在数千个上训练模型而构建..麻省理工学院
Apache Singa (🥉24 · ⭐ 3.4K) - 一个分布式深度学习平台。阿帕奇-2
MMLSpark (🥉23 · ⭐ 5.1K) - 简单和分布式机器学习。麻省理工学院
analytics-zoo (🥉23 · ⭐ 2.6K) - Apache 上的分布式 Tensorflow、Keras 和 PyTorch..阿帕奇-2
Mesh (🥉22 · ⭐ 1.6K · 💤 ) - Mesh TensorFlow:模型并行性变得更加容易。阿帕奇-2
显示 16 个隐藏的项目...

超参数优化 & AutoML

用于超参数优化、automl 和神经架构搜索的库。

Optuna (🥇43 · ⭐ 11K) - 超参数优化框架。麻省理工学院
AutoGluon (🥇36 · ⭐ 8K · 📈 ) - 用 3 行代码快速准确地进行 ML。阿帕奇-2
Ax (🥇36 · ⭐ 2.4K) - 自适应实验平台。麻省理工学院
BoTorch (🥇34 · ⭐ 3.1K) - PyTorch 中的贝叶斯优化。麻省理工学院
贝叶斯优化 (🥇33 · ⭐ 7.9K) - 全局优化的 Python 实现,带有..麻省理工学院
Hyperopt (🥇33 · ⭐ 7.2K) - Python 中的分布式异步超参数优化。BSD-3 封装
featuretools (🥈32 · ⭐ 7.3K) - 用于自动化特征工程的开源 python 库。BSD-3 封装
nevergrad (🥈32 · ⭐ 4K) - 用于执行无梯度优化的 Python 工具箱。麻省理工学院
AutoKeras (🥈31 · ⭐ 9.1K) - 用于深度学习的 AutoML 库。阿帕奇-2
Keras Tuner (🥈31 · ⭐ 2.9K) - 适用于 Keras 的超参数优化库。 阿帕奇-2
mljar-supervised (🥈30 · ⭐ 3K) - 用于表格数据上的 AutoML 的 Python 包,具有功能..麻省理工学院
lazypredict (🥈30 · ⭐ 3K · 📈 ) - Lazy Predict 帮助构建了很多基本模型,但并不多..麻省理工学院
Talos (🥈25 · ⭐ 1.6K · 💤 ) - TensorFlow 和 Keras 的超参数实验。麻省理工学院
FEDOT (🥈25 · ⭐ 640) - 自动化建模和机器学习框架 FEDOT。BSD-3 封装
Hyperactive (🥈25 · ⭐ 510) - 一个方便快捷的优化和数据收集工具箱..麻省理工学院
AlphaPy (🥉21 · ⭐ 1.2K · 💤 ) - 用于交易系统和体育博彩的 Python AutoML。阿帕奇-2
featurewiz (🥉21 · ⭐ 590) - 使用高级特征工程策略并选择最佳..阿帕奇-2
Auto ViML (🥉21 · ⭐ 520) - 使用单行代码自动构建多个 ML 模型...阿帕奇-2
Opytimizer (🥉20 · ⭐ 600) - Opytimizer 是一个由元启发式组成的 Python 库。阿帕奇-2
shap-hypetune (🥉18 · ⭐ 570 · 💤 ) - 一个用于同步超参数调整和..麻省理工学院
显示 32 个隐藏的项目...

强化学习

用于构建和评估强化学习和基于代理的系统。

FinRL (🥇31 · ⭐ 10K) - FinRL:金融强化学习。麻省理工学院
ViZDoom (🥇30 · ⭐ 1.7K) - 基于 1993 年游戏 Doom 的强化学习环境。麻省理工学院
TF-Agents (🥈29 · ⭐ 2.8K) - TF-Agents:一个可靠、可扩展且易于使用的TensorFlow..阿帕奇-2
多巴胺 (🥈28 · ⭐ 11K) - 多巴胺是一种用于快速原型设计的研究框架。阿帕奇-2
Acme (🥈28 · ⭐ 3.5K) - 强化学习组件和代理库。阿帕奇-2
TensorForce (🥈27 · ⭐ 3.3K) - Tensorforce:一个用于应用..阿帕奇-2
PARL (🥉25 · ⭐ 3.3K) - 用于强化的高性能分布式训练框架..阿帕奇-2
RLax (🥉25 · ⭐ 1.3K) - JAX 中的强化学习构建块库。阿帕奇-2
PFRL (🥉22 · ⭐ 1.2K) - PFRL:基于 PyTorch 的深度强化学习库。麻省理工学院
ReAgent (🥉21 · ⭐ 3.6K) - 推理系统(强化学习)平台,..BSD-3 封装
rliable (🥉13 · ⭐ 760) - [NeurIPS21 优秀论文] 用于可靠评估 RL 的库..阿帕奇-2
显示 12 个隐藏的项目...

推荐系统

用于构建和评估推荐系统的库。

推荐系统 (🥇33 · ⭐ 19K) - 推荐系统的最佳实践。麻省理工学院
torchrec (🥇32 · ⭐ 1.9K) - 用于推荐系统的 Pytorch 域库。BSD-3 封装
implicit (🥈29 · ⭐ 3.6K · 💤 ) - 隐式反馈数据集的快速 Python 协作过滤。麻省理工学院
Cornac (🥈28 · ⭐ 880) - 多模态推荐系统的比较框架。阿帕奇-2
scikit-surprise (🥈27 · ⭐ 6.4K) - 用于构建和分析推荐器的Python scikit..BSD-3 封装
TF 排名 (🥈26 · ⭐ 2.7K · 💤 ) - 学习在 TensorFlow 中排名。阿帕奇-2
RecBole (🥉25 · ⭐ 3.4K) - 一个统一、全面、高效的推荐库。麻省理工学院
TF Recommenders (🥉24 · ⭐ 1.8K) - TensorFlow Recommenders是一个用于构建..阿帕奇-2
显示 9 个隐藏的项目...

隐私机器学习

使用诸如联邦学习和差分隐私等方法进行加密和隐私保护机器学习的库。

PySyft (🥇37 · ⭐ 9.5K) - 对保留在他人服务器中的数据执行数据科学。阿帕奇-2
Opacus (🥈31 · ⭐ 1.7K) - 使用差分隐私训练 PyTorch 模型。阿帕奇-2
TensorFlow Privacy (🥈26 · ⭐ 1.9K) - 用于训练机器学习模型的库..阿帕奇-2
TFEncrypted (🥉25 · ⭐ 1.2K) - TensorFlow 中的加密机器学习框架。阿帕奇-2
CrypTen (🥉24 · ⭐ 1.5K) - 隐私保护机器学习框架。麻省理工学院
FATE (🥉23 · ⭐ 5.7K) - 工业级联邦学习框架。阿帕奇-2
显示 1 个隐藏的项目...

工作流程和实验跟踪

用于组织、跟踪和可视化机器学习实验的库。

mlflow (🥇44 · ⭐ 19K) - 机器学习生命周期的开源平台。阿帕奇-2
DVC (🥇42 · ⭐ 14K) - 数据版本控制和 ML 实验。阿帕奇-2
wandb 客户端 (🥇42 · ⭐ 9.1K) - AI 开发人员平台。使用Weights & Biases进行训练和微调-..麻省理工学院
Tensorboard (🥇42 · ⭐ 6.7K) - TensorFlows 可视化工具包。阿帕奇-2
SageMaker SDK (🥈41 · ⭐ 2.1K) - 用于训练和部署机器学习的库..阿帕奇-2
PyCaret (🥈35 · ⭐ 8.9K) - Python 中的开源低代码机器学习库。麻省理工学院
Metaflow (🥈35 · ⭐ 8.2K) - 用于开发、扩展和部署的开源平台..阿帕奇-2
tensorboardX (🥈34 · ⭐ 7.9K · 💤 ) - 适用于 Pytorch 的 Tensorboard(以及 Chainer、mxnet、NumPy 等)。麻省理工学院
snakemake (🥈34 · ⭐ 2.3K) - 这是工作流管理系统的开发之家..麻省理工学院
ClearML (🥈33 · ⭐ 5.7K) - ClearML - 自动神奇的 CI/CD 以简化您的 AI 工作负载...阿帕奇-2
目标 (🥈33 · ⭐ 5.2K) - 目标 一个易于使用且增压的开源实验追踪器。阿帕奇-2
kaggle (🥈32 · ⭐ 6.2K) - 官方 Kaggle API。阿帕奇-2
sacred (🥈32 · ⭐ 4.2K) - Sacred是一个帮助你配置、组织、记录和复制的工具。麻省理工学院
AzureML SDK (🥈32 · ⭐ 4.1K) - 带有ML的Python笔记本和Azure的深度学习示例..麻省理工学院
VisualDL (🥈29 · ⭐ 4.8K) - 深度学习可视化工具包。阿帕奇-2
Labml (🥈29 · ⭐ 2K) - 通过手机监控深度学习模型训练和硬件使用情况。麻省理工学院
Neptune.ai (🥈29 · ⭐ 580) - 用于基础模型训练的实验跟踪器。阿帕奇-2
ml-metadata (🥉28 · ⭐ 620) - 用于记录和检索与 ML 关联的元数据。阿帕奇-2
TNT (🥉26 · ⭐ 1.7K) - 用于 PyTorch 训练工具和实用程序的轻量级库。BSD-3 封装
Quinn (🥉26 · ⭐ 640) - 提高开发人员工作效率的 Pyspark 方法。 阿帕奇-2
gokart (🥉25 · ⭐ 320) - Gokart 解决了可再现性、任务依赖关系、良好代码的约束问题,..麻省理工学院
caliban (🥉17 · ⭐ 490 · 💤 ) - 在本地和云端轻松实现研究工作流程。阿帕奇-2
CometML (🥉16) - 增强机器学习。麻省理工学院
显示 17 个隐藏的项目...

模型序列化和部署

用于将模型序列化为文件、在各种模型格式之间进行转换以及优化模型以进行部署的库。

onnx (🥇43 · ⭐ 18K) - 机器学习互操作性的开放标准。阿帕奇-2
triton (🥇43 · ⭐ 13K) - Triton 语言和编译器的开发存储库。麻省理工学院
huggingface_hub (🥈38 · ⭐ 2.1K) - Huggingface Hub 的官方 Python 客户端。阿帕奇-2
Core ML Tools (🥈36 · ⭐ 4.4K) - Core ML 工具包含对 Core ML 模型的支持工具。BSD-3 封装
BentoML (🥈35 · ⭐ 7.1K) - 最简单的AI应用程序和模型服务 - 构建模型推理..阿帕奇-2
TorchServe (🥈34 · ⭐ 4.2K) - 在生产环境中服务、优化和扩展 PyTorch 模型。阿帕奇-2
蜂鸟 (🥈26 · ⭐ 3.4K) - 蜂鸟将训练好的机器学习模型编译成张量计算。麻省理工学院
hls4ml (🥈26 · ⭐ 1.3K) - 使用 HLS 在 FPGA 上进行机器学习。阿帕奇-2
nebullvm (🥉22 · ⭐ 8.4K) - 用于优化 AI 模型性能的库集合。阿帕奇-2
tfdeploy (🥉17 · ⭐ 350 · 💤 ) - 部署tensorflow图以进行快速评估并导出到..BSD-3 封装
显示 10 个隐藏的项目...

模型可解释性

用于可视化、解释、调试、评估和解释机器学习模型的库。

shap (🥇43 · ⭐ 23K) - 一种博弈论方法,用于解释任何机器学习模型的输出。麻省理工学院
Netron (🥇37 · ⭐ 28K) - 神经网络、深度学习和机器学习的可视化工具..麻省理工学院
arviz (🥇36 · ⭐ 1.6K) - 使用 Python 对贝叶斯模型进行探索性分析。阿帕奇-2
Captum (🥇34 · ⭐ 4.9K) - PyTorch 的模型可解释性和理解。BSD-3 封装
InterpretML (🥇33 · ⭐ 6.3K) - 适合可解释模型。解释 Blackbox 机器学习。麻省理工学院
evaluate (🥇32 · ⭐ 2K) - Evaluate:一个用于轻松评估机器学习模型的库和..阿帕奇-2
shapash (🥈31 · ⭐ 2.7K) - Shapash: 用户友好的可解释性和可解释性..阿帕奇-2
fairlearn (🥈30 · ⭐ 1.9K) - 一个用于评估和改进机器公平性的Python包..麻省理工学院
模型分析 (🥈30 · ⭐ 1.3K) - TensorFlow 的模型分析工具。阿帕奇-2
DoWhy (🥈29 · ⭐ 7.1K) - DoWhy 是一个支持显式的因果推理的 Python 库。麻省理工学院
explainerdashboard (🥈29 · ⭐ 2.3K) - 快速构建显示内部的可解释AI仪表板。麻省理工学院
pyLDAvis (🥈29 · ⭐ 1.8K · 💤 ) - 用于交互式主题模型可视化的 Python 库...BSD-3 封装
LIT (🥈28 · ⭐ 3.5K) - 学习可解释性工具: 交互式分析ML模型以..阿帕奇-2
dtreeviz (🥈27 · ⭐ 3K) - 用于决策树可视化和模型解释的 python 库。麻省理工学院
imodels (🥈27 · ⭐ 1.4K) - 简洁、透明、准确的可解释机器学习包..麻省理工学院
Fairness 360 (🥈26 · ⭐ 2.4K) - 一套全面的数据集公平性指标和..阿帕奇-2
responsible-ai-widgets (🥈26 · ⭐ 1.4K) - 负责任的AI工具箱是一套提供..麻省理工学院
aequitas (🥉25 · ⭐ 690) - 偏见审计和公平机器学习工具包。麻省理工学院
CausalNex (🥉24 · ⭐ 2.2K · 💤 ) - 一个帮助数据科学家进行推理的Python库..阿帕奇-2
Explainability 360 (🥉24 · ⭐ 1.6K) - 数据的可解释性和可解释性以及..阿帕奇-2
keract (🥉24 · ⭐ 1K · 💤 ) - 在 Keras 中对输出和渐变进行分层。变得简单。麻省理工学院
What-If Tool (🥉23 · ⭐ 910 · 💤 ) - What-If 工具的源代码/网页/演示。阿帕奇-2
random-forest-importances (🥉22 · ⭐ 600) - 计算排列和 drop-column 的代码..麻省理工学院
ecco (🥉21 · ⭐ 2K) - 解释、分析和可视化 NLP 语言模型。Ecco 创造..BSD-3 封装
DiCE (🥉20 · ⭐ 1.4K · 💤 ) - 为任何机器生成多样化的反事实解释..麻省理工学院
fairness-indicators (🥉19 · ⭐ 340 · 💤 ) - Tensorflows 公平性评估和可视化..阿帕奇-2
LOFO (🥉18 · ⭐ 820 · 💤 ) - 省略一个特征的重要性。麻省理工学院
ExplainX.ai (🥉15 · ⭐ 420) - 面向数据科学家的可解释 AI 框架。解释并调试任何..麻省理工学院
interpret-text (🥉15 · ⭐ 410 · 💤 ) - 一个包含了最先进的解释器的库..麻省理工学院
显示 25 个隐藏的项目...

向量相似性搜索 (ANN)

用于近似最近邻搜索和向量索引/相似性搜索的库。

🔗 ANN 基准测试 ( ⭐ 5K) - Python 中近似最近邻库的基准测试。

Faiss (🥇41 · ⭐ 31K) - 用于高效相似性搜索和密集向量聚类的库。麻省理工学院
Milvus (🥇41 · ⭐ 30K) - 云原生向量数据库,下一代AI的存储..阿帕奇-2
烦恼 (🥈35 · ⭐ 13K) - C++/Python 中的近似最近邻,针对内存使用进行了优化..阿帕奇-2
NMSLIB (🥈32 · ⭐ 3.4K) - 非度量空间库 (NMSLIB):一种高效的相似性搜索..阿帕奇-2
hnswlib (🥈31 · ⭐ 4.4K) - 用于快速近似最近邻的仅头文件 C++/python 库。阿帕奇-2
USearch (🥉30 · ⭐ 2.2K) - 快速开源的向量和字符串搜索和聚类引擎。阿帕奇-2
PyNNDescent (🥉28 · ⭐ 890) - 近似最近邻的 Python 最近邻下降。BSD-2 型
NGT (🥉22 · ⭐ 1.3K) - 使用邻域图和树进行最近邻搜索以获取 High-..阿帕奇-2
显示 4 个隐藏的项目...

概率学和统计

提供概率编程/推理、贝叶斯推理、高斯过程或统计功能的库。

PyMC3 (🥇41 · ⭐ 8.7K) - Python 中的贝叶斯建模和概率编程。阿帕奇-2
tensorflow-probability (🥇36 · ⭐ 4.3K) - 概率推理和统计分析。阿帕奇-2
Pyro (🥇34 · ⭐ 8.5K) - 使用 Python 和 PyTorch 进行深度通用概率编程。阿帕奇-2
pgmpy (🥇34 · ⭐ 2.7K) - 用于学习(结构和参数)、推理的Python库..麻省理工学院
GPyTorch (🥈32 · ⭐ 3.6K) - PyTorch 中高斯过程的高效实现。麻省理工学院
hmmlearn (🥈31 · ⭐ 3.1K) - Python 中的隐藏马尔可夫模型,具有类似 scikit-learn 的 API。BSD-3 封装
emcee (🥈31 · ⭐ 1.5K) - 仿射不变 MCMC 的 Python 集成采样工具包。麻省理工学院
SALib (🥈31 · ⭐ 880) - Python 中的灵敏度分析库。包含Sobol, Morris, FAST和..麻省理工学院
pandas-ta (🥈30 · ⭐ 5.4K) - 技术分析指标 - pandas TA是一款易于使用的..麻省理工学院
GPflow (🥈30 · ⭐ 1.8K) - TensorFlow 中的高斯进程。阿帕奇-2
patsy (🥈30 · ⭐ 950 · 💤 ) - 使用符号公式在 Python 中描述统计模型。BSD-2 型
PyStan (🥉28 · ⭐ 340) - PyStan,Stan 的 Python 接口,Stan 是一个统计建模平台...国际生物中心
pomegranate (🥉27 · ⭐ 3.4K) - 快速、灵活且易于使用的 Python 概率建模。麻省理工学院
小鹿斑比 (🥉26 · ⭐ 1.1K) - Python 中的 BAyesian 模型构建接口 (Bambi)。麻省理工学院
scikit-posthocs (🥉26 · ⭐ 350) - Python 中的多个成对比较(事后)测试。麻省理工学院
Orbit (🥉23 · ⭐ 1.9K) - 一个用于贝叶斯预测的Python包,具有面向对象的设计..阿帕奇-2
Baal (🥉22 · ⭐ 860) - 用于研究和工业用例的贝叶斯主动学习库。阿帕奇-2
TorchUncertainty (🥉22 · ⭐ 300 · ➕ ) - 用于不确定性和深度的开源框架..阿帕奇-2
显示 6 个隐藏的项目...

对抗稳健性

用于测试机器学习模型对对抗性/恶意示例攻击的稳健性的库。

ART (🥇35 · ⭐ 4.9K) - 对抗性鲁棒工具箱 (ART) - 用于机器学习的Python库..麻省理工学院
TextAttack (🥈27 · ⭐ 3K) - TextAttack 是一个用于对抗性攻击、数据..麻省理工学院
Foolbox (🥈27 · ⭐ 2.8K · 💤 ) - 一个Python工具箱,用于创建欺骗神经的对抗性示例。麻省理工学院
显示 6 个隐藏的项目...

GPU &加速器实用程序

需要并利用 CUDA/GPU 或其他加速器硬件功能来优化机器学习任务的库。

optimum (🥇36 · ⭐ 2.6K) - 加速Transformers和Diffusers的训练和推理..阿帕奇-2
cuDF (🥇35 · ⭐ 8.4K) - cuDF - 数据帧库 GPU。阿帕奇-2
PyCUDA (🥈32 · ⭐ 1.8K) - Python 的 CUDA 集成,以及闪亮的功能。麻省理工学院
Apex (🥈31 · ⭐ 8.4K) - 一个PyTorch扩展:用于轻松混合精度和分布式的工具..BSD-3 封装
cuML ( 🥈31 · ⭐ 4.2K ) - cuML - RAPIDS 机器学习库。阿帕奇-2
gpustat (🥈29 · ⭐ 4.1K · 💤 ) - 用于查询和监控 GPU 状态的简单命令行实用程序。麻省理工学院
ArrayFire (🥈28 · ⭐ 4.6K) - ArrayFire:通用 GPU 库。 BSD-3 封装
CuPy (🥈27 · ⭐ 8.1K · 📉 ) - 用于GPU的NumPy和SciPy。麻省理工学院
cuGraph (🥈27 · ⭐ 1.7K) - cuGraph - RAPIDS 图形分析库。阿帕奇-2
DALI (🥉25 · ⭐ 5.1K) - 一个包含高度优化的构建块的GPU加速库..阿帕奇-2
Vulkan Compute (🥉23 · ⭐ 2K) - 基于 Vulkan 构建的通用 GPU 计算框架,用于... 阿帕奇-2
Merlin (🥉21 · ⭐ 770) - NVIDIA Merlin 是一个提供端到端 GPU 的开源库-..阿帕奇-2
显示 8 个隐藏的项目...

Tensorflow 实用程序

使用其他功能扩展 TensorFlow 的库。

TensorFlow Datasets (🥇39 · ⭐ 4.3K) - TFDS是一组可供使用的数据集。阿帕奇-2
TFX (🥇34 · ⭐ 2.1K) - TFX 是一个用于部署生产 ML 管道的端到端平台。阿帕奇-2
tensorflow-hub (🥈32 · ⭐ 3.5K) - 一个通过重用部分进行迁移学习的库。阿帕奇-2
TF插件(🥈32 · ⭐ 1.7K · 💤 ) - 为TensorFlow 2.x维护的有用的额外功能..阿帕奇-2
TensorFlow I/O (🥈30 · ⭐ 700) - 数据集、流和文件系统扩展..阿帕奇-2
TF模型优化 (🥈28 · ⭐ 1.5K) - 一个优化ML模型的工具包,用于部署..阿帕奇-2
TensorFlow 转换 (🥈28 · ⭐ 980) - 输入管道框架。阿帕奇-2
神经结构化学习 (🥉24 · ⭐ 980) - 使用结构化信号训练神经模型。阿帕奇-2
显著性 (🥉22 · ⭐ 950 · 💤 ) - 框架无关的实现,用于最先进的..阿帕奇-2
TF 压缩 (🥉21 · ⭐ 860) - TensorFlow 中的数据压缩。阿帕奇-2
TensorFlow Cloud (🥉21 · ⭐ 380 · 💤 ) - TensorFlow Cloud存储库提供的API..阿帕奇-2
显示 5 个隐藏的项目...

Jax 实用程序

使用其他功能扩展 Jax 的库。

equinox (🥇31 · ⭐ 2.1K) - 优雅易用的神经网络 + 科学计算...阿帕奇-2
evojax (🥉20 · ⭐ 840) - EvoJAX:硬件加速的神经进化。阿帕奇-2
显示 1 个隐藏的项目...

Sklearn 实用程序

使用其他功能扩展 scikit-learn 的库。

scikit-learn-intelex (🥇35 · ⭐ 1.2K) - Intel(R) Scikit-learn的扩展是一种无缝的方式..阿帕奇-2
MLxtend (🥇34 · ⭐ 4.9K · 📈 ) - 一个用于Pythons数据的扩展和帮助模块库..BSD-3 封装
imbalanced-learn (🥈33 · ⭐ 6.8K) - 一个解决不平衡诅咒的Python包..麻省理工学院
category_encoders (🥈32 · ⭐ 2.4K) - 一个与sklearn兼容的分类变量库..BSD-3 封装
scikit-lego (🥈27 · ⭐ 1.3K) - scikit-learn 管道的额外块。麻省理工学院
scikit-opt (🥉25 · ⭐ 5.3K) - 遗传算法,粒子群优化,模拟..麻省理工学院
迭代分层 (🥉23 · ⭐ 850) - scikit-learn 迭代交叉验证器..BSD-3 封装
dabl (🥉20 · ⭐ 720) - 数据分析基线库。BSD-3 封装
scikit-tda (🥉19 · ⭐ 530) - Python 的拓扑数据分析。麻省理工学院
DESlib (🥉18 · ⭐ 480 · 💤 ) - 用于动态分类器和集成选择的 Python 库。BSD-3 封装
显示 9 个隐藏的项目...

Pytorch 实用程序

使用其他功能扩展 Pytorch 的库。

加速 (🥇40 · ⭐ 7.9K) - 一种简单的方法,用于启动、训练和使用 PyTorch 模型。阿帕奇-2
PML (🥇34 · ⭐ 6K · 📈 ) - 在应用程序中使用深度度量学习的最简单方法...麻省理工学院
tinygrad (🥇33 · ⭐ 27K) - 你喜欢 pytorch 吗?你喜欢 micrograd 吗?你爱 tinygrad!。麻省理工学院
EfficientNets (🥈25 · ⭐ 1.6K) - 预训练的 EfficientNet、EfficientNet-Lite、MixNet,..阿帕奇-2
torch-scatter (🥈25 · ⭐ 1.6K) - 优化分散操作的 PyTorch 扩展库。麻省理工学院
Pytorch工具带(🥉23 · ⭐ 1.5K) - 用于快速研发原型和卡格gle的PyTorch扩展..麻省理工学院
PyTorch Sparse (🥉23 · ⭐ 1K) - 优化的 Autograd 稀疏矩阵的 PyTorch 扩展库..麻省理工学院
显示 25 个隐藏的项目...

数据库客户端

用于连接、操作和查询数据库的库。

🔗 best-of-python - 数据库客户端 ( ⭐ 3.7K) - python 的数据库客户端集合。

别人

scipy (🥇50 · ⭐ 13K) - 数学、科学和工程的开源软件生态系统。BSD-3 封装
SymPy (🥇49 · ⭐ 13K) - 用纯 Python 编写的计算机代数系统。BSD-3 封装
Streamlit (🥇46 · ⭐ 36K) - Streamlit 一种构建和共享数据应用程序的更快方式。Apache-2
Gradio (🥇44 · ⭐ 34K · 📈 ) - 将 UI 包裹在任何模型上,与任何人分享。阿帕奇-2
Autograd (🥇37 · ⭐ 7K) - 高效计算 NumPy 代码的衍生数。麻省理工学院
PennyLane (🥇37 · ⭐ 2.3K · 📈 ) - PennyLane是一个跨平台的量子Python库。阿帕奇-2
carla (🥇35 · ⭐ 11K) - 用于自动驾驶研究的开源模拟器。麻省理工学院
DeepChem (🥇35 · ⭐ 5.5K) - 使深度学习在药物发现中大众化,量子化学,..麻省理工学院
Datasette (🥈34 · ⭐ 9.5K) - 用于浏览和发布数据的开源多工具。阿帕奇-2
PyOD (🥈34 · ⭐ 8.6K) - 一个用于异常值和异常检测的Python库,集成了经典的..BSD-2 型
hdbscan (🥈34 · ⭐ 2.8K) - HDBSCAN 集群的高性能实现。BSD-3 封装
agate (🥈34 · ⭐ 1.2K) - 一个针对人类优化的Python数据分析库,而不是..麻省理工学院
River (🥈33 · ⭐ 5.1K) - Python 中的在线机器学习。BSD-3 封装
Pythran (🥈33 · ⭐ 2K) - 用于数值内核的超前编译器。BSD-3 封装
tensorly (🥈33 · ⭐ 1.6K) - TensorLy:Python 中的张量学习。BSD-2 型
datalad (🥈32 · ⭐ 540) - 使用 git 和 git-annex 控制代码、数据、容器。麻省理工学院
PaddleHub (🥈31 · ⭐ 13K) - 基于 PaddlePaddle 的超棒预训练模型工具包...阿帕奇-2
anomalib (🥈31 · ⭐ 3.8K) - 一个包含最新算法的异常检测库..阿帕奇-2
pyjanitor (🥈31 · ⭐ 1.4K) - 用于数据清理的清理 API。R 包的 Python 实现..麻省理工学院
pyopencl (🥈31 · ⭐ 1.1K) - Python 的 OpenCL 集成,以及闪亮的功能。麻省理工学院
causalove my life (🥈30 · ⭐ 5.1K) - 用机器学习提升建模和因果推理..阿帕奇-2
dstack (🥈30 · ⭐ 1.5K) - dstack是Kubernetes的开源替代品,旨在..MPL-2.0 系列
Avalanche (🥈29 · ⭐ 1.8K) - Avalanche:一个基于.. 的持续学习的端到端库。麻省理工学院
TabPy (🥈29 · ⭐ 1.6K) - 动态执行 Python 代码并在 Tableau 可视化中显示结果:.麻省理工学院
Prince (🥈29 · ⭐ 1.3K) - Python PCA、CA、MCA、MFA 中的多变量探索性数据分析,..麻省理工学院
pycm (🥉28 · ⭐ 1.5K) - Python 中的多类混淆矩阵库。麻省理工学院
kmodes (🥉28 · ⭐ 1.2K · 💤 ) - k-modes 和 k-prototypes 集群的 Python 实现..麻省理工学院
adapter-transformers (🥉27 · ⭐ 2.6K) - 一个用于参数效率和模块化的统一库..Apache-2huggingface
pyclustering (🥉27 · ⭐ 1.2K · 💤 ) - pyclustering 是一个 Python、C++ 数据挖掘库。BSD-3 封装
Trax (🥉26 · ⭐ 8.1K) - 具有清晰代码和速度的 Trax 深度学习。阿帕奇-2
Feature Engine (🥉26 · ⭐ 1.9K) - 具有类似 sklearn 的功能的特征工程包。BSD-3 封装
AugLy (🥉25 · ⭐ 5K) - 用于音频、图像、文本和视频的数据增强库。麻省理工学院
metric-learn (🥉25 · ⭐ 1.4K) - Python 中的度量学习算法。麻省理工学院
Mars (🥉24 · ⭐ 2.7K · 💤 ) - Mars是一个基于张量的大规模数据统一框架。阿帕奇-2
MONAILabel (🥉24 · ⭐ 610) - MONAI Label是一种智能开源的图像标签和..阿帕奇-2
BioPandas (🥉23 · ⭐ 710) - 在 pandas DataFrames 中处理分子结构。BSD-3 封装
AstroML (🥉22 · ⭐ 1.1K · 💤 ) - 用于天文学的机器学习、统计和数据挖掘..BSD-2 型
benchmark_VAE (🥉21 · ⭐ 1.8K) - 统一变分自动编码器 (VAE) 实现..阿帕奇-2
pykale (🥉21 · ⭐ 440) - 知识感知机器学习 (KALE):可访问的机器学习..麻省理工学院
SUOD (🥉21 · ⭐ 380 · 💤 ) - (MLSys 21) 一个用于大型恐慌无人监督的加速系统..BSD-2 型
pymdp (🥉20 · ⭐ 460) - 马尔可夫决策过程主动推理的 Python 实现。麻省理工学院
NeuralCompression (🥉16 · ⭐ 500) - 面向神经压缩爱好者的工具集合。麻省理工学院
显示 24 个隐藏的项目...

相关资源

  • 带代码的论文:发现 ML 论文、代码和评估表。
  • Sotabench:发现并比较开源的ML模型。
  • Google 数据集搜索:Google 的数据集搜索引擎。
  • 数据集列表:来自 Web 的最大 ML 数据集的列表。
  • Awesome Public Datasets:以主题为中心的开放数据集列表。
  • 最佳列表:发现其他最佳列表,其中包含有关各种主题的出色开源项目。
  • best-of-python-dev:出色的 Python 开发人员工具和库的排名列表。
  • best-of-web-python:用于 Web 开发的出色 python 库的排名列表。

贡献

我们鼓励并始终欢迎贡献!如果要添加或更新项目,请选择以下方法之一:

  • 通过从问题页面选择提供的类别之一来打开问题,并填写请求的信息。
  • 使用添加或更改修改 projects.yaml,然后提交拉取请求。这也可以直接通过 Github UI 完成。

如果您想为项目元数据集合或 Markdown 生成做出贡献或分享建议,请参阅 best-of-generator 存储库。如果您想创建自己的最佳列表,我们建议您遵循本指南。

有关如何添加或更新项目的更多信息,请阅读 贡献指南.参与本项目,即表示您同意遵守其行为准则。

SEO Google: 添加到 Search Console(有效解决零收录情况)

Posted on 2024-11-11

说明

如果发现搜索结果中一条记录都没有,那么在完成本文指引后,再等待 1 天,再去查询收录情况,就会发现提交的网站已经被收录了。

方法

  1. 打开控制台:https://search.google.com/search-console/welcome?hl=zh-cn
  2. 根据提示输入域名,添加 DNS 解析,我使用的验证方式是 CNAME,添加完后点击验证
  3. 点击左侧导航栏打开刚刚验证完成的网站,刚刚添加的网站,在 1 天后才能查看数据:
    ![image-20241111100407215](/Users/hoey/Library/Application Support/typora-user-images/image-20241111100407215.png)

查询是否已被收录

打开 Google,在搜索框输入以下内容(将 yourdomain.com 替换为你自己的顶级域名),然后点击搜索按钮:

1
site:yourdomain.com

深入了解 site: 搜索运算符

分析

根据 Google 收录后的条目,大概可以得知,GoogleBot 会先访问添加的网址,进而收集该入口页面的所有的超链接(),然后再访问这些超链接,再收集页面上超链接。

建议:

  • 路径层级最好不要超过两级,也就是说最大层级别超过 /a/b
  • 如果有些网址没有展示在页面上,那么就需要提交 站点地图 了

自定义图床OneDrive(二)

Posted on 2024-11-02

需求: E5保活+OneDrive(简称od)图床,由于篇幅太长,套域名就不写了。

前置准备:

  1. Debain12 & docker环境
  2. Windows (用来申请rclone访问OD Token)

安装rclone

1
2
3
sudo -v ; curl https://rclone.org/install.sh | sudo bash
# 安装rclone依赖
apt install fuse3

申请AZ客户端ID和密钥

rclone和od对接,需要”客户端ID”和”客户端密钥”这个到面板上申请一个。

访问Azure API管理面板登陆

image-20241102233146492

点击“新注册”注册一个应用程序。

image-20241102233214397

输入名称,勾选权限后注册应用。

image-20241102233240133

注册成功后将跳转到管理页面,记下图中所示的“应用程序(客户端) ID”,供将来挂载使用。

image-20241102233304789

此时点击“证书与密码”→“新客户端密码”,填写说明和截至期限后,添加密码。

image-20241102233419464

​ 添加密码后,我们记录密码值,供将来挂载使用。注意这里一定要将密码记录下来,因为它只显示一次。

image-20241102233439907

​ 接下来,点击“API权限”,为我们的api获取权限。Files中的权限全部勾选。

image-20241102233511198

至此,我们已经申请好了onedrive的api,目前我们已经得到了客户端ID以及客户端密钥。

rclone配置OD

到Windows下载rclone,执行下面的命令获取token

1
2
# windows系统下按win+R调出运行,输入“cmd”
rclone.exe authorize "onedrive" "客户端ID" "客户端密钥"

![image-20241102234244003](/Users/hoey/Library/Application Support/typora-user-images/image-20241102234244003.png)

把toekn存下来,后面要用,接下来来配置rclone 并挂在onedrive到本地/mnt/onedrive/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 配rclone注册远程连接
rclone config
n
onedrive
35 Microsoft OneDrive
客户端ID
客户端密钥
1 Microsoft Cloud Global
n No (default) 不进行高级配置
n No 不使用自动配置
配置上面从windows存储的token
1 OneDrive Personal or Business
y
y

最终成功结果,如果你哪一步跟不上可以参考这个文档申请onedrive api并使用rclone将其挂载为本地磁盘_rclone onedrive-CSDN博客参考上半部分就行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mkdir -p /mnt/onedrive/
vim /etc/systemd/system/rclone.service

# 里面的5G需要根据磁盘的大小设置,但是不能超过剩余磁盘空间

[Unit]
Description=rclone

[Service]
User=root
ExecStart=/usr/bin/rclone mount onedrive:/ /mnt/onedrive/ --allow-other --allow-non-empty --vfs-cache-mode writes --vfs-cache-max-size 5G --transfers 3
Restart=on-failure

[Install]
WantedBy=multi-user.target

sudo systemctl daemon-reload
sudo systemctl start rclone
sudo systemctl enable rclone
sudo systemctl status rclone

lsky

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mkdir -p /opt/docker/lsky-pro/lsky
cd /opt/docker/lsky-pro

vim docker-compose.yml
# 18088 & 18089可以自定义
services:
lsky-pro:
image: hisatri/lsky:latest
container_name: lsky-pro
restart: unless-stopped
ports:
- "18088:8088"
- "18089:8089"
volumes:
- $PWD/lsky:/var/www/html
- /mnt/onedrive:/onedrive
environment:
- HTTPS_PORT=8088
- WEB_PORT=8089

docker-compose up -d

访问localhost:18089

数据库选择sqllite,存储目录留空不填写,自己设置个邮箱和密码。

角色组

image-20241102235558735

存储策略

image-20241102235626568

picgo

插件->lankong

image-20241102235818645

设置

![image-20241102235848350](/Users/hoey/Library/Application Support/typora-user-images/image-20241102235848350.png)

Auth token的获取方法:

照着这个放一个post请求就可以了。

http://pic.yihao.de/api/v1/tokens?email=&password=

image-20241103004820420

微软E5账号介绍

Posted on 2024-10-31

image-20241031101825149

Microsoft 365 E5是一款综合性的商业应用套件,它包含一系列的生产力应用和服务。E5版特别提供了一些高级的安全、合规性、语音和分析能力【7†source】。E5包括以下的应用和服务:

  • Word
  • Excel
  • PowerPoint
  • Outlook
  • OneNote
  • SharePoint
  • OneDrive (5T)
  • Microsoft Teams
  • Power BI Pro
  • Windows【9+source】

喜当爹

Posted on 2024-10-27

image-20241027142706017

意不意外、惊不惊喜,就是这么快。

自定义图床

Posted on 2024-10-27

image-20241027141114973

之前用的阿里云图床,后来产生的费用让人难以维持,下面用TG+CF的方案实现一个图床,自己试了一下很好用

https://img.yihao.de/

一、GitHub

按照github的代码部署一下,操作如readme一样

0-RTT/telegraph

二、 worder.js

我这边自行稍微改造了一点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
export default {
async fetch(request, env) {
const { pathname } = new URL(request.url);
const domain = env.DOMAIN;
const DATABASE = env.DATABASE;
const USERNAME = env.USERNAME;
const PASSWORD = env.PASSWORD;
const adminPath = env.ADMIN_PATH;
const enableAuth = env.ENABLE_AUTH === 'true';
const TG_BOT_TOKEN = env.TG_BOT_TOKEN;
const TG_CHAT_ID = env.TG_CHAT_ID;

switch (pathname) {
case '/':
return await handleRootRequest(request, USERNAME, PASSWORD, enableAuth);
case `/${adminPath}`:
return await handleAdminRequest(DATABASE, request, USERNAME, PASSWORD);
case '/upload':
return request.method === 'POST' ? await handleUploadRequest(request, DATABASE, enableAuth, USERNAME, PASSWORD, domain, TG_BOT_TOKEN, TG_CHAT_ID) : new Response('Method Not Allowed', { status: 405 });
case '/bing-images':
return handleBingImagesRequest();
case '/delete-images':
return handleDeleteImagesRequest(request, DATABASE);
default:
return await handleImageRequest(request, DATABASE, TG_BOT_TOKEN);
}
}
};

let isAuthenticated = false;

function authenticate(request, USERNAME, PASSWORD) {
const authHeader = request.headers.get('Authorization');
if (!authHeader) return false;
return isValidCredentials(authHeader, USERNAME, PASSWORD);
}

async function handleRootRequest(request, USERNAME, PASSWORD, enableAuth) {
const cache = caches.default;
const cacheKey = new Request(request.url);
if (enableAuth) {
if (!authenticate(request, USERNAME, PASSWORD)) {
return new Response('Unauthorized', { status: 401, headers: { 'WWW-Authenticate': 'Basic realm="Admin"' } });
}
}
const cachedResponse = await cache.match(cacheKey);
if (cachedResponse) {
return cachedResponse;
}
const response = new Response(`
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Telegraph图床-基于Workers的图床服务">
<meta name="keywords" content="Telegraph图床,Workers图床, Cloudflare, Workers,telegra.ph, 图床">
<title>Telegraph图床-基于Workers的图床服务</title>
<link rel="icon" href="https://p1.meituan.net/csc/c195ee91001e783f39f41ffffbbcbd484286.ico" type="image/x-icon">
<link href="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/twitter-bootstrap/4.6.1/css/bootstrap.min.css" rel="stylesheet" />
<link href="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/bootstrap-fileinput/5.2.7/css/fileinput.min.css" rel="stylesheet" />
<link href="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/toastr.js/2.1.4/toastr.min.css" rel="stylesheet" />
<link href="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/font-awesome/5.15.4/css/all.min.css" type="text/css" rel="stylesheet" />
<style>
body {
margin: 0;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
position: relative;
}
.background {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-size: cover;
z-index: -1;
transition: opacity 1s ease-in-out;
opacity: 1;
}
.card {
background-color: rgba(255, 255, 255, 0.8);
border: none;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
padding: 20px;
width: 90%;
max-width: 400px;
text-align: center;
margin: 0 auto;
position: relative;
}
.uniform-height {
margin-top: 20px;
}
#viewCacheBtn {
position: absolute;
top: 10px;
right: 10px;
background: none;
border: none;
color: rgba(0, 0, 0, 0.1);
cursor: pointer;
font-size: 24px;
transition: color 0.3s ease;
}
#viewCacheBtn:hover {
color: rgba(0, 0, 0, 0.4);
}
#cacheContent {
margin-top: 20px;
max-height: 200px;
border-radius: 5px;
overflow-y: auto;
}
.cache-title {
text-align: left;
margin-bottom: 10px;
}
.cache-item {
display: block;
cursor: pointer;
border-radius: 4px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
transition: background-color 0.3s ease;
text-align: left;
padding: 10px;
}
.cache-item:hover {
background-color: #e9ecef;
}
.project-link {
font-size: 14px;
text-align: center;
margin-top: 5px;
margin-bottom: 0;
}
textarea.form-control {
max-height: 200px;
overflow-y: hidden;
resize: none;
}
</style>
</head>
<body>
<div class="background" id="background"></div>
<div class="card">
<div class="title">Telegraph图床</div>
<button type="button" class="btn" id="viewCacheBtn" title="查看历史记录"><i class="fas fa-clock"></i></button>
<div class="card-body">
<form id="uploadForm" action="/upload" method="post" enctype="multipart/form-data">
<div class="file-input-container">
<input id="fileInput" name="file" type="file" class="form-control-file" data-browse-on-zone-click="true" multiple>
</div>
<div class="form-group mb-3 uniform-height" style="display: none;">
<button type="button" class="btn btn-light mr-2" id="urlBtn">URL</button>
<button type="button" class="btn btn-light mr-2" id="bbcodeBtn">BBCode</button>
<button type="button" class="btn btn-light" id="markdownBtn">Markdown</button>
</div>
<div class="form-group mb-3 uniform-height" style="display: none;">
<textarea class="form-control" id="fileLink" readonly></textarea>
</div>
<div id="cacheContent" style="display: none;"></div>
</form>
</div>
<script src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.min.js" type="application/javascript"></script>
<script src="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/bootstrap-fileinput/5.2.7/js/fileinput.min.js" type="application/javascript"></script>
<script src="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/bootstrap-fileinput/5.2.7/js/locales/zh.min.js" type="application/javascript"></script>
<script src="https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/toastr.js/2.1.4/toastr.min.js" type="application/javascript"></script>
<script>
async function fetchBingImages() {
const response = await fetch('/bing-images');
const data = await response.json();
return data.data.map(image => image.url);
}

async function setBackgroundImages() {
const images = await fetchBingImages();
const backgroundDiv = document.getElementById('background');
if (images.length > 0) {
backgroundDiv.style.backgroundImage = 'url(' + images[0] + ')';
}
let index = 0;
let currentBackgroundDiv = backgroundDiv;
setInterval(() => {
const nextIndex = (index + 1) % images.length;
const nextBackgroundDiv = document.createElement('div');
nextBackgroundDiv.className = 'background next';
nextBackgroundDiv.style.backgroundImage = 'url(' + images[nextIndex] + ')';
document.body.appendChild(nextBackgroundDiv);
nextBackgroundDiv.style.opacity = 0;
setTimeout(() => {
nextBackgroundDiv.style.opacity = 1;
}, 50);
setTimeout(() => {
document.body.removeChild(currentBackgroundDiv);
currentBackgroundDiv = nextBackgroundDiv;
index = nextIndex;
}, 1000);
}, 5000);
}

$(document).ready(function() {
let originalImageURLs = [];
let isCacheVisible = false;
initFileInput();
setBackgroundImages();

function initFileInput() {
$("#fileInput").fileinput({
theme: 'fa',
language: 'zh',
browseClass: "btn btn-primary",
removeClass: "btn btn-danger",
showUpload: false,
showPreview: false,
}).on('filebatchselected', handleFileSelection)
.on('fileclear', handleFileClear);
}

async function handleFileSelection() {
const files = $('#fileInput')[0].files;
for (let i = 0; i < files.length; i++) {
await uploadFile(files[i]);
}
}

async function uploadFile(file) {
try {
toastr.info('上传中...', '', { timeOut: 0 });
const interfaceInfo = {
acceptTypes: 'image/*,video/*',
maxFileSize: 20 * 1024 * 1024
};
const acceptedTypes = interfaceInfo.acceptTypes.split(',');
const isAcceptedType = acceptedTypes.some(type => {
return type.includes('*') ? file.type.startsWith(type.split('/')[0]) : file.type === type;
});
if (!isAcceptedType) {
toastr.error('仅支持图片或视频格式的文件。');
return;
}
if (file.size > interfaceInfo.maxFileSize) {
if (file.type.startsWith('video/') || file.type === 'image/gif') {
toastr.error('文件必须≤20MB');
return;
} else {
toastr.info('正在压缩...', '', { timeOut: 0 });
const compressedFile = await compressImage(file);
file = compressedFile;
}
}
const formData = new FormData($('#uploadForm')[0]);
formData.set('file', file, file.name);
const uploadResponse = await fetch('/upload', { method: 'POST', body: formData });
const responseData = await handleUploadResponse(uploadResponse);
if (responseData.error) {
toastr.error(responseData.error);
} else {
originalImageURLs.push(responseData.data);
$('#fileLink').val(originalImageURLs.join('\\n\\n'));
$('.form-group').show();
adjustTextareaHeight($('#fileLink')[0]);
toastr.success('文件上传成功!');
saveToLocalCache(responseData.data, file.name);
}
} catch (error) {
console.error('处理文件时出现错误:', error);
$('#fileLink').val('文件处理失败!');
toastr.error('文件处理失败!');
} finally {
toastr.clear();
}
}

async function handleUploadResponse(response) {
if (response.ok) {
return await response.json();
} else {
const errorData = await response.json();
return { error: errorData.error };
}
}

$(document).on('paste', function(event) {
const clipboardData = event.originalEvent.clipboardData;
if (clipboardData && clipboardData.items) {
for (let i = 0; i < clipboardData.items.length; i++) {
const item = clipboardData.items[i];
if (item.kind === 'file') {
const pasteFile = item.getAsFile();
uploadFile(pasteFile);
break;
}
}
}
});

async function compressImage(file, quality = 0.5, maxResolution = 20000000) {
return new Promise((resolve) => {
const image = new Image();
image.onload = () => {
const width = image.width;
const height = image.height;
const resolution = width * height;
let scale = 1;
if (resolution > maxResolution) {
scale = Math.sqrt(maxResolution / resolution);
}
const targetWidth = Math.round(width * scale);
const targetHeight = Math.round(height * scale);
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.width = targetWidth;
canvas.height = targetHeight;
ctx.drawImage(image, 0, 0, targetWidth, targetHeight);
canvas.toBlob((blob) => {
const compressedFile = new File([blob], file.name, { type: 'image/jpeg' });
toastr.success('图片压缩成功!');
resolve(compressedFile);
}, 'image/jpeg', quality);
};
const reader = new FileReader();
reader.onload = (event) => {
image.src = event.target.result;
};
reader.readAsDataURL(file);
});
}

$('#urlBtn, #bbcodeBtn, #markdownBtn').on('click', function() {
const fileLinks = originalImageURLs.map(url => url.trim()).filter(url => url !== '');
if (fileLinks.length > 0) {
let formattedLinks = '';
switch ($(this).attr('id')) {
case 'urlBtn':
formattedLinks = fileLinks.join('\\n\\n');
break;
case 'bbcodeBtn':
formattedLinks = fileLinks.map(url => '[img]' + url + '[/img]').join('\\n\\n');
break;
case 'markdownBtn':
formattedLinks = fileLinks.map(url => '![image](' + url + ')').join('\\n\\n');
break;
default:
formattedLinks = fileLinks.join('\\n');
}
$('#fileLink').val(formattedLinks);
adjustTextareaHeight($('#fileLink')[0]);
copyToClipboardWithToastr(formattedLinks);
}
});

function handleFileClear(event) {
$('#fileLink').val('');
adjustTextareaHeight($('#fileLink')[0]);
hideButtonsAndTextarea();
originalImageURLs = [];
}

function adjustTextareaHeight(textarea) {
textarea.style.height = '1px';
textarea.style.height = (textarea.scrollHeight > 200 ? 200 : textarea.scrollHeight) + 'px';

if (textarea.scrollHeight > 200) {
textarea.style.overflowY = 'auto';
} else {
textarea.style.overflowY = 'hidden';
}
}

function copyToClipboardWithToastr(text) {
const input = document.createElement('textarea');
input.value = text;
document.body.appendChild(input);
input.select();
document.execCommand('copy');
document.body.removeChild(input);
toastr.success('已复制到剪贴板', '', { timeOut: 300 });
}

function hideButtonsAndTextarea() {
$('#urlBtn, #bbcodeBtn, #markdownBtn, #fileLink').parent('.form-group').hide();
}

function saveToLocalCache(url, fileName) {
const timestamp = new Date().toLocaleString('zh-CN', { hour12: false });
const cacheData = JSON.parse(localStorage.getItem('uploadCache')) || [];
cacheData.push({ url, fileName, timestamp });
localStorage.setItem('uploadCache', JSON.stringify(cacheData));
}

$('#viewCacheBtn').on('click', function() {
const cacheData = JSON.parse(localStorage.getItem('uploadCache')) || [];
const cacheContent = $('#cacheContent');
cacheContent.empty();
if (isCacheVisible) {
cacheContent.hide();
$('#fileLink').val('');
$('#fileLink').parent('.form-group').hide();
isCacheVisible = false;
} else {
if (cacheData.length > 0) {
cacheData.reverse();
cacheData.forEach((item) => {
const listItem = $('<div class="cache-item"></div>')
.text(item.timestamp + ' - ' + item.fileName)
.data('url', item.url);
cacheContent.append(listItem);
cacheContent.append('<br>');
});
cacheContent.show();
} else {
cacheContent.append('<div>还没有记录哦!</div>').show();
}
isCacheVisible = true;
}
});

$(document).on('click', '.cache-item', function() {
const url = $(this).data('url');
originalImageURLs = [];
$('#fileLink').val('');
originalImageURLs.push(url);
$('#fileLink').val(originalImageURLs.map(url => url.trim()).join('\\n\\n'));
$('.form-group').show();
adjustTextareaHeight($('#fileLink')[0]);
});
});
</script>
</body>
</html>
`, { headers: { 'Content-Type': 'text/html;charset=UTF-8' } });
await cache.put(cacheKey, response.clone());
return response;
}

async function handleAdminRequest(DATABASE, request, USERNAME, PASSWORD) {
if (!authenticate(request, USERNAME, PASSWORD)) {
return new Response('Unauthorized', { status: 401, headers: { 'WWW-Authenticate': 'Basic realm="Admin"' } });
}
return await generateAdminPage(DATABASE);
}

function isValidCredentials(authHeader, USERNAME, PASSWORD) {
const base64Credentials = authHeader.split(' ')[1];
const credentials = atob(base64Credentials).split(':');
const username = credentials[0];
const password = credentials[1];
return username === USERNAME && password === PASSWORD;
}

async function generateAdminPage(DATABASE) {
const mediaData = await fetchMediaData(DATABASE);
const mediaHtml = mediaData.map(({ url }) => {
const fileExtension = url.split('.').pop().toLowerCase();
const timestamp = url.split('/').pop().split('.')[0];
if (fileExtension === 'mp4') {
return `
<div class="media-container" data-key="${url}" onclick="toggleImageSelection(this)">
<div class="media-type">视频</div>
<video class="gallery-video" style="width: 100%; height: 100%; object-fit: contain;" data-src="${url}" controls>
<source src="${url}" type="video/mp4">
您的浏览器不支持视频标签。
</video>
<div class="upload-time">上传时间: ${new Date(parseInt(timestamp)).toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })}</div>
</div>
`;
} else {
return `
<div class="image-container" data-key="${url}" onclick="toggleImageSelection(this)">
<img data-src="${url}" alt="Image" class="gallery-image lazy">
<div class="upload-time">上传时间: ${new Date(parseInt(timestamp)).toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })}</div>
</div>
`;
}
}).join('');

const html = `
<!DOCTYPE html>
<html>
<head>
<title>图库</title>
<link rel="icon" href="https://p1.meituan.net/csc/c195ee91001e783f39f41ffffbbcbd484286.ico" type="image/x-icon">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 20px;
}
.header {
position: sticky;
top: 0;
background-color: #ffffff;
z-index: 1000;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
padding: 15px 20px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
border-radius: 8px;
}
.gallery {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 16px;
}
.image-container, .media-container {
position: relative;
overflow: hidden;
border-radius: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
aspect-ratio: 1 / 1;
transition: transform 0.3s, box-shadow 0.3s;
}
.media-type {
position: absolute;
top: 10px;
left: 10px;
background-color: rgba(0, 0, 0, 0.7);
color: white;
padding: 5px;
border-radius: 5px;
font-size: 14px;
z-index: 10;
cursor: pointer;
}
.image-container .upload-time, .media-container .upload-time {
position: absolute;
bottom: 10px;
left: 10px;
background-color: rgba(255, 255, 255, 0.7);
padding: 5px;
border-radius: 5px;
color: #000;
font-size: 14px;
z-index: 10;
display: none;
}
.image-container:hover, .media-container:hover {
transform: scale(1.05);
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
}
.gallery-image {
width: 100%;
height: 100%;
object-fit: contain;
transition: opacity 0.3s;
opacity: 0;
}
.gallery-image.loaded {
opacity: 1;
}
.media-container.selected, .image-container.selected {
border: 2px solid #007bff;
background-color: rgba(0, 123, 255, 0.1);
}
.footer {
margin-top: 20px;
text-align: center;
font-size: 18px;
color: #555;
}
.delete-button {
background-color: #ff4d4d;
color: white;
border: none;
border-radius: 5px;
padding: 10px 15px;
cursor: pointer;
transition: background-color 0.3s;
width: auto;
}
.delete-button:hover {
background-color: #ff1a1a;
}
.hidden {
display: none;
}
@media (max-width: 600px) {
.gallery {
grid-template-columns: repeat(2, 1fr);
}
.header {
flex-direction: row;
align-items: center;
}
.header-right {
margin-left: auto;
}
.footer {
font-size: 16px;
}
.delete-button {
width: 100%;
margin-top: 10px;
}
}
</style>
<script>
let selectedCount = 0;
const selectedKeys = new Set();
function toggleImageSelection(container) {
const key = container.getAttribute('data-key');
container.classList.toggle('selected');
const uploadTime = container.querySelector('.upload-time');
if (container.classList.contains('selected')) {
selectedKeys.add(key);
selectedCount++;
uploadTime.style.display = 'block';
} else {
selectedKeys.delete(key);
selectedCount--;
uploadTime.style.display = 'none';
}
updateDeleteButton();
}
function updateDeleteButton() {
const deleteButton = document.getElementById('delete-button');
const countDisplay = document.getElementById('selected-count');
countDisplay.textContent = selectedCount;
const headerRight = document.querySelector('.header-right');
if (selectedCount > 0) {
headerRight.classList.remove('hidden');
} else {
headerRight.classList.add('hidden');
}
}
async function deleteSelectedImages() {
if (selectedKeys.size === 0) return;
const response = await fetch('/delete-images', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(Array.from(selectedKeys))
});
if (response.ok) {
alert('选中的媒体已删除');
location.reload();
} else {
alert('删除失败');
}
}
document.addEventListener('DOMContentLoaded', () => {
const images = document.querySelectorAll('.gallery-image[data-src]');
const options = {
root: null,
rootMargin: '0px',
threshold: 0.1
};
const imageObserver = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
img.onload = () => img.classList.add('loaded');
observer.unobserve(img);
}
});
}, options);
images.forEach(image => {
imageObserver.observe(image);
});
});
</script>
</head>
<body>
<div class="header">
<div class="header-left">
<span>媒体文件 ${mediaData.length} 个</span>
<span>已选中: <span id="selected-count">0</span>个</span>
</div>
<div class="header-right hidden">
<button id="delete-button" class="delete-button" onclick="deleteSelectedImages()">删除选中</button>
</div>
</div>
<div class="gallery">
${mediaHtml}
</div>
<div class="footer">
到底啦
</div>
</body>
</html>
`;
return new Response(html, { status: 200, headers: { 'Content-Type': 'text/html; charset=utf-8' } });
}

async function fetchMediaData(DATABASE) {
const result = await DATABASE.prepare('SELECT url, fileId FROM media').all();
const mediaData = result.results.map(row => {
const timestamp = parseInt(row.url.split('/').pop().split('.')[0]);
return { fileId: row.fileId, url: row.url, timestamp: timestamp };
});
mediaData.sort((a, b) => b.timestamp - a.timestamp);
return mediaData.map(({ fileId, url }) => ({ fileId, url }));
}

async function handleUploadRequest(request, DATABASE, enableAuth, USERNAME, PASSWORD, domain, TG_BOT_TOKEN, TG_CHAT_ID) {
try {
const formData = await request.formData();
const file = formData.get('file');
if (!file) throw new Error('缺少文件');
if (enableAuth && !authenticate(request, USERNAME, PASSWORD)) {
return new Response('Unauthorized', { status: 401, headers: { 'WWW-Authenticate': 'Basic realm="Admin"' } });
}
const uploadFormData = new FormData();
uploadFormData.append("chat_id", TG_CHAT_ID);
let fileId;
if (file.type.startsWith('image/gif')) {
const newFileName = file.name.replace(/\.gif$/, '.jpeg');
const newFile = new File([file], newFileName, { type: 'image/jpeg' });
uploadFormData.append("document", newFile);
} else {
uploadFormData.append("document", file);
}
const telegramResponse = await fetch(`https://api.telegram.org/bot${TG_BOT_TOKEN}/sendDocument`, { method: 'POST', body: uploadFormData });
if (!telegramResponse.ok) {
const errorData = await telegramResponse.json();
throw new Error(errorData.description || '上传到 Telegram 失败');
}
const responseData = await telegramResponse.json();
if (responseData.result.video) fileId = responseData.result.video.file_id;
else if (responseData.result.document) fileId = responseData.result.document.file_id;
else if (responseData.result.sticker) fileId = responseData.result.sticker.file_id;
else throw new Error('返回的数据中没有文件 ID');
const fileExtension = file.name.split('.').pop();
const timestamp = Date.now();
const imageURL = `https://${domain}/${timestamp}.${fileExtension}`;
await DATABASE.prepare('INSERT INTO media (url, fileId) VALUES (?, ?) ON CONFLICT(url) DO NOTHING').bind(imageURL, fileId).run();
return new Response(JSON.stringify({ data: imageURL }), { status: 200, headers: { 'Content-Type': 'application/json' } });
} catch (error) {
console.error('内部服务器错误:', error);
return new Response(JSON.stringify({ error: error.message }), { status: 500, headers: { 'Content-Type': 'application/json' } });
}
}

async function handleImageRequest(request, DATABASE, TG_BOT_TOKEN) {
const requestedUrl = request.url;
const cache = caches.default;
const cacheKey = new Request(requestedUrl);
const cachedResponse = await cache.match(cacheKey);
if (cachedResponse) return cachedResponse;
const result = await DATABASE.prepare('SELECT fileId FROM media WHERE url = ?').bind(requestedUrl).first();
if (result) {
const fileId = result.fileId;
const getFileResponse = await fetch(`https://api.telegram.org/bot${TG_BOT_TOKEN}/getFile?file_id=${fileId}`);
if (!getFileResponse.ok) return new Response(null, { status: 404 });
const fileData = await getFileResponse.json();
const filePath = fileData.result.file_path;
const telegramFileUrl = `https://api.telegram.org/file/bot${TG_BOT_TOKEN}/${filePath}`;
const response = await fetch(telegramFileUrl);
if (response.ok) {
const fileExtension = requestedUrl.split('.').pop().toLowerCase();
let contentType = 'text/plain';
if (fileExtension === 'jpg' || fileExtension === 'jpeg') contentType = 'image/jpeg';
if (fileExtension === 'png') contentType = 'image/png';
if (fileExtension === 'gif') contentType = 'image/gif';
if (fileExtension === 'webp') contentType = 'image/webp';
if (fileExtension === 'mp4') contentType = 'video/mp4';
const headers = new Headers(response.headers);
headers.set('Content-Type', contentType);
headers.set('Content-Disposition', 'inline');
const responseToCache = new Response(response.body, { status: response.status, headers });
await cache.put(cacheKey, responseToCache.clone());
return responseToCache;
}
}
const notFoundResponse = new Response(null, { status: 404 });
await cache.put(cacheKey, notFoundResponse.clone());
return notFoundResponse;
}

async function handleBingImagesRequest(request) {
const cache = caches.default;
const cacheKey = new Request('https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=5');
const cachedResponse = await cache.match(cacheKey);
if (cachedResponse) return cachedResponse;
const res = await fetch(cacheKey);
const bingData = await res.json();
const images = bingData.images.map(image => ({ url: `https://www.dmoe.cc/random.php` }));
const returnData = { status: true, message: "操作成功", data: images };
const response = new Response(JSON.stringify(returnData), { status: 200, headers: { 'Content-Type': 'application/json' } });
await cache.put(cacheKey, response.clone());
return response;
}

async function handleDeleteImagesRequest(request, DATABASE) {
if (request.method !== 'POST') {
return new Response('Method Not Allowed', { status: 405 });
}
try {
const keysToDelete = await request.json();
if (!Array.isArray(keysToDelete) || keysToDelete.length === 0) {
return new Response(JSON.stringify({ message: '没有要删除的项' }), { status: 400 });
}
const placeholders = keysToDelete.map(() => '?').join(',');
const result = await DATABASE.prepare(`DELETE FROM media WHERE url IN (${placeholders})`).bind(...keysToDelete).run();
if (result.changes === 0) {
return new Response(JSON.stringify({ message: '未找到要删除的项' }), { status: 404 });
}
const cache = caches.default;
for (const url of keysToDelete) {
const cacheKey = new Request(url);
const cachedResponse = await cache.match(cacheKey);
if (cachedResponse) {
await cache.delete(cacheKey);
}
}
return new Response(JSON.stringify({ message: '删除成功' }), { status: 200 });
} catch (error) {
return new Response(JSON.stringify({ error: '删除失败', details: error.message }), { status: 500 });
}
}

三、 关于背景修改

下面是两个可用的动漫背景随机图,可以提供修改。

1
const images = bingData.images.map(image => ({ url: `https://www.dmoe.cc/random.php` }));

这行代码里面的url可以改掉就行了。

动漫
www.dmoe.cc/random.php
api.mtyqx.cn/tapi/random.php (挺好看的动漫)

分享几个公用的高清壁纸图片的API | LearnKu 产品论坛

四、 关于PicGo

到插件中下载一个【自定义图床】插件,按照下面设置即可

image-20241027141000857

Netcup注册

Posted on 2024-10-25

Netcup可以注册后缀为de的域名一年1.32欧元,续费一样相当划算

image-20241025090250956

另外Netcup有0.84欧元/月的VPS套餐,每个账户只允许申请一台。

image-20241025090506316

探针如下:

image-20241025090705371

1.家宽直连,最好在下午4点到早上6点去试,这样能快一点,德国人在上班。用这个链接去买,感谢justwe佬的分享,应该不是aff

1
2
3
1o:https://www.netcup.de/bestellen/produkt.php?produkt=3422
2o:https://www.netcup.de/bestellen/produkt.php?produkt=3423
4o:https://www.netcup.de/bestellen/produkt.php?produkt=3424

2.一直往下点就行,不行就翻译一下,选择注册帐号,填入你的真实信息,地址不能有“,”全英文,地址选中国,公司可以不填
3.会发一封邮件说工作人员正在审核,问你要不要付款,你可以取消之类的,如果你用家宽的话等5分钟左右会收到两封连在一起的邮件,一封给了你帐号密码,另一封让你去验证身份,你打开验证身份即可,注意一定要在第一次就选择预付款,不要选验证身份
4.去https://www.servercontrolpanel.de/SCP/Home 登录,会发二步验证到你的邮箱,去billing付款,信用卡或者paypal,等机器开通,done!

全程顺利的话半小时解决,我等机器开通等了1个小时,现在只要付钱就能过了,方便多了

findbook的使用方法

Posted on 2024-09-19

我们在searching图书的时候,下载时如果长时间停留0%,那一定是你的网关设置的有问题,只需要按照下面配置即可。

  1. 访问下面地址,查看自己的网络状态

https://ipfs.github.io/public-gateway-checker/

image-20240919164656261

  1. 将域名复制编辑

    1
    2
    3
    4
    https://ipfs.runfission.com
    https://4everland.io
    https://gateway.pinata.cloud
    https://trustless-gateway.link

​ 将上面的内容复制到页面右上角的⚙️中去,然后保存。

image-20240919164811500

  1. 重新尝试下载

HSD高频航班累订阅事件说明-ICKI

Posted on 2024-05-21

8类基础数据

Mockjs 造数据写入Mysql

Posted on 2024-05-20

Mock.js 是一个用于生成随机数据和拦截 Ajax 请求的库,常用于前端开发中对接口进行模拟。通过 Mock.js,可以快速生成各种类型的随机数据,包括但不限于文本、数字、日期、布尔值等,从而方便地进行数据模拟和测试。除了数据生成外,Mock.js 也可以拦截前端发送的 Ajax 请求,返回预先设定的模拟数据,使前端开发人员能够在没有后端支持的情况下进行接口调试及开发。

下面我们使用Mockjs生成数据,写入到Mysql数据库

下面是项目目录结构:

1
2
3
4
5
6
.
├── main.js
├── package.json
└── util
├── dbutil.js
└── mockutil.js

提前使用npm或cnpm安装所需要的依赖:

1
2
cnpm install mockjs --save
cnpm install mysql --save

数据库建表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

CREATE TABLE aoc_flight_info_dw (
id BIGINT AUTO_INCREMENT COMMENT '主键' PRIMARY KEY,
flight_date DATE NOT NULL COMMENT '航班日期',
flight_no VARCHAR(10) NOT NULL COMMENT '航班号',
dep_airport VARCHAR(4) NOT NULL COMMENT '起飞机场',
arr_airport VARCHAR(4) NOT NULL COMMENT '到达机场',
transfer_number INT(10) DEFAULT 0 NOT NULL COMMENT '中转人数',
etd DATETIME NOT NULL COMMENT '预计起飞时间',
eta DATETIME NOT NULL COMMENT '预计到达时间',
exist_vip TINYINT(1) DEFAULT 0 NOT NULL COMMENT '是否有VIP旅客',
previous_delay TINYINT(1) DEFAULT 0 NOT NULL COMMENT '前段航班是否延误',
estimate_delay_time INT(10) DEFAULT 0 NOT NULL COMMENT '预计延误时间',
std DATETIME NOT NULL COMMENT '计划起飞时间',
sta DATETIME NOT NULL COMMENT '计划到达时间',
flight_type VARCHAR(10) NOT NULL COMMENT '航班性质',
d_or_i VARCHAR(10) NOT NULL COMMENT '国际/国内/地区',
ac_type VARCHAR(10) NOT NULL COMMENT '机型',
ac_reg VARCHAR(10) NOT NULL COMMENT '机号',
warn_level VARCHAR(10) NULL COMMENT '预警航班等级',
create_time DATETIME DEFAULT current_timestamp NOT NULL COMMENT '创建时间',
update_time DATETIME DEFAULT current_timestamp NOT NULL ON UPDATE current_timestamp COMMENT '更新时间',
CONSTRAINT unq_flight_idx UNIQUE (flight_date, flight_no, dep_airport, arr_airport)
) COMMENT '航班信息表同步数仓' CHARSET = utf8mb4;

CREATE INDEX aoc_flight_info_flight_date_idx ON aoc_flight_info_dw (flight_date, ac_reg);


CREATE TABLE aoc_passenger_info_dw (
id BIGINT AUTO_INCREMENT COMMENT '主键' PRIMARY KEY,
aoc_flight_id BIGINT NOT NULL COMMENT '航班信息表id',
passenger_name VARCHAR(100) DEFAULT '' NOT NULL COMMENT '姓名',
vip_type VARCHAR(10) DEFAULT '' NOT NULL COMMENT 'VIP类型',
vip_line VARCHAR(100) DEFAULT '' NOT NULL COMMENT 'VIP航程',
create_time DATETIME DEFAULT current_timestamp NOT NULL COMMENT '创建时间',
update_time DATETIME DEFAULT current_timestamp NOT NULL ON UPDATE current_timestamp COMMENT '更新时间'
) COMMENT 'VIP旅客信息表数仓同步' CHARSET = utf8mb4;

CREATE INDEX aoc_passenger_info_aoc_flight_id_idx ON aoc_passenger_info_dw (aoc_flight_id);


1. 连接Mysql数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var Mysql = require('mysql');

var conn = Mysql.createConnection({
host : '172.22.17.38',
user : 'u_tqd',
password : '62w5LjLi',
port: '3306',
database: 'tqddb',
});

exports.insert = function(sql, dim_arr){
conn.connect();
dim_arr.data.forEach(element=>{
conn.query(sql, element, function(err, result){
if(err){
console.log('err:', err.message);
}
console.log('------INSERT-------');
console.log('res:', result);
console.log('------SUCCESS-------');
});
})
conn.end();
}

2. 使用mock伪造数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
var Mock = require('mockjs');

exports.aoc_flight_info_dw = Mock.mock({
"data|500": [
[
"@increment(1)", // id
"@date('yyyy-MM-dd')", // flight_date
/^HO[0-9]{4}$/, // flight_no
/^[A-Z]{3}$/, // dep_airport
/^[A-Z]{3}$/, // arr_airport
"@integer(0, 20 )", // transfer_number
"@datetime('yyyy-MM-dd HH:mm:ss')", // etd
"@datetime('yyyy-MM-dd HH:mm:ss')", // eta
"@integer(0, 1 )", // exist_vip
"@integer(0, 1 )", // previous_delay
"@integer(1800, 18000 )", // estimate_delay_time
"@datetime('yyyy-MM-dd HH:mm:ss')", // std
"@datetime('yyyy-MM-dd HH:mm:ss')", // sta
"@integer(0, 3 )", // flight_type
/D|I|R/, // d_or_i
/A320|A321|B787|A319/, // ac_type
/^[0-9]{4}$/, // ac_reg
"@integer(0, 1 )", // warn_level
"@datetime('yyyy-MM-dd HH:mm:ss')", // create_time
"@datetime('yyyy-MM-dd HH:mm:ss')", // update_time
]
]
});

exports.aoc_passenger_info_dw = Mock.mock({
"data|500": [
[
"@increment(1)", // id
"@integer(0, 1000 )", // aoc_flight_id
"@cname()", // passenger_name
"@integer(0, 3 )", // vip_type
"@integer(0, 3 )", // vip_line
"@datetime('yyyy-MM-dd HH:mm:ss')",// create_time
"@datetime('yyyy-MM-dd HH:mm:ss')",// update_time
]
]
});

3. 编写main

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var mockutil = require('./util/mockutil.js');
var dbutil = require('./util/dbutil.js');

function aoc_flight_info_dw(){
var sql = 'INSERT INTO tqddb.aoc_flight_info_dw (id, flight_date, flight_no, dep_airport, arr_airport, transfer_number, etd, eta, exist_vip, previous_delay, estimate_delay_time, std, sta, flight_type, d_or_i, ac_type, ac_reg, warn_level, create_time, update_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);'
dbutil.insert(sql, mockutil.aoc_flight_info_dw);
}

function aoc_passenger_info_dw(){
var sql = 'INSERT INTO tqddb.aoc_passenger_info_dw (id, aoc_flight_id, passenger_name, vip_type, vip_line, create_time, update_time) VALUES (?,?,?,?,?,?,?);'
dbutil.insert(sql, mockutil.aoc_passenger_info_dw);
}

function main(){
//aoc_flight_info_dw();
aoc_passenger_info_dw()

}

main();
12…5>

42 posts
© 2024 Hoey